내 응용 프로그램에서 지원하는 가능한 모든 메시지를 저장하려는 "메시지"테이블이 있다고 가정합니다. 예를 들어 FB와 유사한 응용 프로그램에는 "미디어 메시지"(예 : 사진, 비디오, 오디오), "미디어 앨범 메시지", "개인 메시지"등이있을 수 있습니다.이 모델을 작성하는 한 가지 방법은 다음과 같습니다.데이터베이스 디자인 : NULL 인 FK는 좋든 나쁘지?
Table: message
- messag_id (PK)
- user_id (FK, this is the sender of the message)
- message
TABLE: media_message
- media_message_id (PK, receiver of the message implied by the owner of the media)
- message_id (FK)
TABLE: media_album_message
- media_album_message_id (PK, receiver of the message implied by the owner of the media album)
- message_id (FK)
TABLE: private_message
- private_message_id (PK)
- message_id (FK)
- user_id (FK, receiver of the message)
... etc.
그래서 모든 유형의 메시지에 대해 "매핑 테이블"을 만들어야합니다. 이 작품 같은
겠습니까 뭔가 :
TABLE: message
- message_id (PK)
- receiver_user_id (FK)
- sender_user_id (FK)
- message
- media_album_id (FK, NULL allowed)
- media_id (FK, NULL allowed)
나는 아직도 참조 무결성을 적용 할 수있는이 디자인으로 생각합니다. media_album_id
과 media_id
이 둘 다 NULL이면 "개인"메시지라고 가정 할 수도 있고 응용 프로그램 계층에서 유사한 논리를 구현할 수도 있습니다. 아래쪽 면도 아래쪽 면도 항상 사용되지 않는 컬럼이 있습니다. 그럼 다시, 어쩌면 이것은 더 나은 규모가 될 것입니다 - 적은 JOINs 등
생각들?
NULL 가능 FK는 허용되며 선택적으로 존재하는 관계에 문제가되지 않습니다. –
래리, dportas의 의견에 대해 어떻게 생각하십니까? – StackOverflowNewbie