私のアプリケーションでサポートされているすべての可能なメッセージを保存する "メッセージ"テーブルがあるとします。たとえば、FBのようなアプリケーションでは、「メディアメッセージ」(写真、ビデオ、オーディオなど)、「メディアアルバムメッセージ」、「プライベートメッセージ」などがあります。これをモデル化する方法の1つはデータベース設計:FKはNULLです - 良いか悪いですか?
です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の場合、私はそれが "プライベート"メッセージ(またはアプリケーション層で類似のロジックを実装している)と考えることができます。下側は、それが下側であっても、使用されていない列が常に存在することです。それでは、もう一度、これはうまくスケールされます - 少ないジョインなど
思考?
NULL可能なFKは許可されており、オプションで既存の関係には問題ありません。 –
Larry、dportasのコメントについてどう思いますか? – StackOverflowNewbie