我有一些用戶和代理的數據庫,並希望添加一個簡單的消息系統。用於將表與其他表中的一個相關聯的數據庫設計
所以,我有以下簡單的一組表:
[users]
- user_id (PK)
[agents]
- agent_id (PK)
[message_threads]
- message_thread_id (PK)
[message]
- message_id (PK)
- message_thread_id (FK messages_threads.message_thread_id)
我沒有從消息和誰發佈的消息,個人的關係。
有一點我卡住了,因爲它可能是用戶或代理。我認爲這是一個普遍存在的問題,但我沒有找到這樣的討論。
我知道我有幾個選擇,但他們都有缺點。
選項1: 我不喜歡這樣的消息可以鏈接到兩個不同的帳戶。
[message]
- message_id (PK)
- message_thread_id (FK messages_threads.message_thread_id)
- user_id (FK users.user_id, ALLOW NULL)
- agent_id (FK agents.agent_id, ALLOW NULL)
選項2: 這使它尷尬獲得在SELECT的一列的所有消息。
[message_by_user]
- message_id (PK)
- message_thread_id (FK messages_threads.message_thread_id)
- user_id (FK users.user_id)
[message_by_agent]
- message_id (PK)
- message_thread_id (FK messages_threads.message_thread_id)
- agent_id (FK agents.agent_id)
我不能將用戶和代理組合到一個表中。這是成立的。
關於這個設計的一個很好的討論可以在[如何將IS-A關係映射到數據庫中?](http://dba.stackexchange.com/questions/5501/how-doi-i-地圖-AN-is-a的關係 - 進入 - 一個數據庫) – user2045006 2015-01-01 22:18:37