我有一些用户和代理的数据库,并希望添加一个简单的消息系统。用于将表与其他表中的一个相关联的数据库设计
所以,我有以下简单的一组表:
[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