我正在设计ms sql视频聊天数据库,我很难在两个表之间设计多个多对多关系。 我的项目要求:
我最终得到了下面的数据库,但我觉得我的设计中存在太多的冗余(关于房间和用户之间多少关系的信息)但同时我还没有想要简化这一点。 sql diagram picture
[编辑]
UserStatus是房间内的用户是观察者或成员
的信息isStreaming实体将被删除(UserStatus描述它已经全部准备好)
可以忽略RoomStatus
答案 0 :(得分:1)
IMO唯一的冗余表是版主和禁止。
主持人 仅仅是用户的属性(特定的房间用户)。您可以在is_moderator
表中只有一列Room_Users
。
禁止 不是必需的,除非您想将其用作日志,或者要求在全球范围内禁止用户。在您的情况下,用户将被禁止在房间级别。您可以在banned_by
中包含ban_reason
和Room_Users
列,只有在空间用户被禁止时才会有值,否则为NULL
。
作为旁注:您需要重新考虑您的命名标准,除非您已使用的已经是您组织的标准的一部分。使用room_user或RoomUser。这纯粹是我的意见,你不必盲目跟随它。
另外,我建议您在表格中使用奇异名称。表名应与单个记录表明的内容一致。 User
代替Users
。当您的应用程序代码使用包含表记录集合的属性时,这会更有意义。例如,public IEnumerable<User> Users { get; set; }
vs public User User { get; set; }
。对SQL表使用单数名称不仅仅是我的意见,也是一种标准。您可以在Google上进一步阅读。