퀴즈엔 여러개의 보기가 있습니다. 사용자는 퀴즈당 한개의 보기만 고를 수 있습니다. 이를 어떻게 강제 할 수 있을까요? Django ORM에서 말이죠.

답은, ‘쉽지 않다’ 입니다.

(user, quiz, option)을 response의 필드로 두고 (user, quiz)에 unique constraint를 걸면, option이 quiz 소속인지를 보장 할 수 없는데, 이거까지 보장하는건 쉽지 않습니다.

(user, option)만 필드로 둘 경우엔 (user, option__quiz)를 unique로 둬야하는데 이런 기능은 존재하지 않죠.

복합키, trigger 등을 사용하기엔 너무 복잡하고, 결국 어플리케이션 로직이 필요합니다.

그래서, 어떡하지 이제

1

If you have a fediverse account, you can reply to this note from your own instance. Search https://hackers.pub/ap/notes/0197ad3e-9938-77ff-805b-d64ab92ce500 on your instance and reply to it.

0

(user, quiz, option)을 response의 필드로 두고 (user, quiz)에 unique constraint를 걸면, option이 quiz 소속인지를 보장 할 수 없는데, 이거까지 보장하는건 쉽지 않습니다.

@theeluwin제이미 option 테이블의 기본 키를 (quiz_id, index) 정도의 복합 키로 만든 뒤에, response 테이블의 (quiz_id, option_index)option 키의 외래 키로 만들면 option이 어느 quiz의 소속인지 강제할 수 있지 않을까요?

0