【问题标题】:Data model design for a specialized chat application专用聊天应用程序的数据模型设计
【发布时间】:2012-06-18 19:33:17
【问题描述】:

我在为我的应用程序设计合适的数据模型时遇到了困难。
在我的应用程序中,我有成对的参与者,他们将一起完成几项活动。每个配对在其存在过程中将进行 2-3 次对话。每个对话可能有许多消息由配对中的任何一个参与者编写。
我拥有的最好的模型是这样的:

         PAIRINGS
          /     \
         /       \
        V         V  
PARTICIPANTS     CONVERSATIONS
-pairing_id      -pairing_id
       \          /
        \        /
         V      V
         MESSAGES
         -participant_id
         -conversation_id

但是,此模型允许消息的作者不在与对话相关联的配对之外,这似乎是错误的。有人对我如何构建数据模型有更好的建议吗?

【问题讨论】:

  • 这太模糊了。没有标准符号。不够详细。
  • 我没有足够的声望来发布图片,所以我无法包含图表。如果有任何问题我可以回答,我很乐意这样做。

标签: database-design data-modeling


【解决方案1】:

这是一个常见问题。在MESSAGES 表中添加pairing_id 并适当更改两个FOREIGN 键以包含此列:

          PAIRINGS
          /     \
         /       \
        V         V  
PARTICIPANTS     CONVERSATIONS
-pairing_id      -pairing_id
       \          /
        \        /
         V      V
         MESSAGES
         -participant_id
         -conversation_id
         -pairing_id

大多数 DBMS 还要求您在 PARTICIPANTS (pairing_id, participant_id)CONVERSATIONS (pairing_id, conversation_id) 上添加 UNIQUE 索引

【讨论】:

  • 有趣...这是我可以阅读更多的常见模式吗?我可以在互联网上搜索一些术语吗?
  • 是的,我应该说它在菱形设计中很常见。看到这个类似的问题:SQL: Normalization of database while retaining constraints 或这个(更复杂的)一个:Choosing from multiple candidate keys
  • 请注意,这需要复合(复合)PK 或唯一索引和复合外键 - 并且某些 ORM 在复合 FK 方面存在困难或根本无法使用这些。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
  • 2020-10-24
相关资源
最近更新 更多