繁体   English   中英

良好的数据库设计/规范化

[英]Good Database design/normalisation

我被分配了一个任务,我不确定该如何处理它:

我必须构建一个支持多个设备的消息系统,并且它应该尽可能高效。 用户最多可以拥有10台设备,当用户收到消息时,所有这些设备都需要接收一条消息。

我有两个想法:

Table Messages:
- ID (PK)
- SenderID
- ReceiverID
- Data

Table PendingTransmissions:
- MessageID (FK (PK of above table))
- DeviceID (FK)

这里的问题是,每次发送消息时,每个设备都会创建一个条目,并且会导致大量开销。

Table Messages:
- ID (PK)
- SenderID
- ReceiverID
- Data
- ReceivedDevice1
- ReceivedDevice2
- ReceivedDevice3
- ReceivedDevice4
- ReceivedDevice5
- ReceivedDevice6
- ReceivedDevice7
- ReceivedDevice8
- ReceivedDevice9
- ReceivedDevice10

这里的问题显然是设备的冗余,但是开销会更低。

什么是更好的解决方案,或者我完全错过了什么?

提前致谢!

第一种方法是完全有效的,应该是可行的方法。 第二种方法的可维护性令人震惊,并且在以后添加一些代码时,该代码将不太可读(我必须维护以这种方式设计的多个DB)。

我建议使用第二种方法,至少有两个原因:

  • 今天,一个用户可以拥有10台设备。 如果该数字将来更改为20,则意味着应用程序的许多层都发生了变化:数据库,应用程序实体类,DAO等。
  • 将来,您可能想为组添加功能。 为此扩展这种设计将很麻烦。

在第一种方法中,如果您担心PendingTransmissions大小过大,则可以像这样处理:

  • 添加两列: isDelivereddeliveredTimestamp 然后,您可以定期归档所有已交付且早于1个月的行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM