MessageBoardApp的数据库结构

时间:2015-12-26 11:47:56

标签: mysql sql-server database

好的,我被告知我的最后一个问题太宽了,所以我这次尝试的更精确。

我需要MessageBoard应用程序的数据库结构。 我有2个想法,但不知道哪个更好。 还有另一种可能性比我的想法更好吗?

有用户,消息和组。 所有消息都属于至少一个组,但可以更多。 用户至少订阅一个组,并且可以查看他们所属的所有组的所有消息。 用户可以随意创建组。

量表(理论上): 用户:百万 消息:数十亿 群组:超过用户

我现在有两个想法:

创意1:

表用户:

  • ID
  • 所有个人信息......
  • GroupsSubscribed(包含所有组ID的字符串?)
  • LastUpdate(日期)

表格消息:

  • ID
  • ImageURI
  • 文本
  • 创建者
  • 日期
  • Answer_Messages_IDs(包含作为此邮件答案的所有邮件ID的字符串)

表组:

  • ID
  • 组名
  • LastUpdate(日期)

想法:

消息获取:

  1. App每隔X秒获取Group-LastUpdate(数据库调用:组)
  2. 如果Group-LastUpdate> User-LastUpdate - > 选择所有组包含组和日期的消息> LastUpdate(数据库电话:消息)
  3. 消息写:

    1. 应用程序写入属于更多组的消息
    2. 在消息表中保存消息(数据库调用)
    3. 更新组表LastUpdate(数据库调用)
    4. -----------------

      创意2:

      表用户:

      • ID
      • 所有个人信息......
      • GroupsSubscribed(包含所有组ID的字符串?)
      • NewMessages(带有MessageIDs的字符串?)

      表格消息:

      • ID
      • ImageURI
      • 文本
      • 创建者
      • 日期
      • Answer_Messages_IDs(包含作为此邮件答案的所有邮件ID的字符串)

      表组:

      • ID
      • 组名
      • UserIDs(包含所有用户ID的字符串)

      点子:

      消息获取:

      1. App每隔X秒获取一次User-NewMessages(数据库调用:用户)
      2. 如果User-NewMessages!=“” - > 选择NewMessages列表中的ID所有消息(数据库调用:消息)
      3. 消息写:

        1. 应用程序写入属于更多组的消息
        2. 在消息表中保存消息(数据库呼叫:消息)
        3. 获取每个组的群组用户ID(数据库呼叫:群组)
        4. 使用新消息ID(数据库电话:用户)
        5. 更新每个用户

1 个答案:

答案 0 :(得分:1)

这是@Paul Spiegel在上面指出的数据库规范化练习。

您可以创建以下内容:

  

用户

     
      
  • UserID PK
  •   
  • ImageURI
  •   
  • ...个人用户信息栏......
  •   
     

消息

     
      
  • MessageID PK
  •   
  • 文本
  •   
  • UserID FK - >用户(UserID)//消息作者(创作者)
  •   
  • 日期
  •   
     

回复

     
      
  • MessageID FK - >消息(邮件ID)
  •   
  • ReplyID FK - >消息(邮件ID)
  •   
  • PK(MessageID,ReplyID)
  •   
     

     
      
  • GroupID PK
  •   
  • 名称
  •   
  • 描述
  •   
  • UserID FK - >用户(UserID)//组主持人 - 我只是为了好玩而添加这个。
  •   
     

User_Groups

     
      
  • UserID FK - >用户(用户ID)
  •   
  • GroupID FK - >组(组ID)
  •   
  • PK(UserID,GroupID)
  •   
     

Message_Groups

     
      
  • MessageID FK - >消息(邮件ID)
  •   
  • GroupID FK - >组(组ID)
  •   
  • PK(MessageID,GroupID)
  •   

我假设它是用户头像,我将ImageID从消息移动到用户。如果它确实与消息相关联,那么将其移回。

除了已包含的PK和FK之外,还有三个应用程序完整性规则。

AIR#1 - Messages中存在一行意味着Message_Groups中至少有一个匹配的行。

AIR#2 - Users中存在一行意味着User_Groups中至少有一个匹配的行。

AIR#3 - 给定的ReplyID只能在回复中出现一次。这保持了邻接列表语义,防止了广义的多对多关联并强制执行分层关联。

数据库连接逻辑和应用程序代码留给读者练习。