我正在设计一个必须支持大量邮件和用户的邮件系统。
我在考虑两种解决方案。
Usertable -> id, username ....
Messagetable -> id, from_id, to_id, message ...
或者:
Usertable -> id, username ....
Messagetable -> id, message ...
HasMessagetable -> id, from_id, to_id...
我想知道最好的方法是什么以及为什么。
此外,是否有关于大型数据库设计和最佳实践的好的出版物(免费或不免费)?
谢谢
答案 0 :(得分:1)
通常,您必须执行的连接越少,查询执行的效果就越好。因此,第一个选项可能是更好的选择,因为您将拥有一个非常大的数据库。
基本上,您需要忽略一些数据库规范化技术才能获得所需的性能。但是,尽量不要限制自己。例如,如果您有多个人的消息,您将需要选择第二个选项或者找出一种不同的方式来处理这个问题。
对于大型数据库设计的资源,这里有一个用于Microsoft SQL Server的资源,但它讨论的很多东西都适用:
答案 1 :(得分:1)
您的第二个架构更加规范化。两者都可以接受。正确规范化的数据库设计更加清晰,但出于性能原因,许多DBA诉诸denormalisation。我会使用第二个模式,直到你遇到性能问题,这将是我非常谦虚的观点中更好的方法。
请注意,正如其他人发布的那样,规范化到这个程度通常被许多人视为过度杀伤。我这样做的方式来自我12年前学到的习惯和旧的(现在过时的)数据库理论课程。
快乐编码
答案 2 :(得分:1)
我不久前做了同样的事情,并从方法1开始。但是后来用户应该能够向多个用户发送消息。如果n个收件人被解决,突然接近1保存每条消息n次。因此,如果有可能,我认为2更好。