消息系统。关于数据库设计的问题

问题描述:

我正在设计一个消息传递系统,它必须支持大量的消息和用户。消息系统。关于数据库设计的问题

我在想两种解决方案。

Usertable -> id, username .... 
Messagetable -> id, from_id, to_id, message ... 

或者:

Usertable -> id, username .... 
Messagetable -> id, message ... 
HasMessagetable -> id, from_id, to_id... 

我想知道什么是这个,为什么最好的办法。

另外,是否有关于大型数据库设计和最佳实践的良好出版物(免费或不是)?

谢谢

+1

请不要将数据库用作消息队列。请使用消息队列作为消息队列。有很多强大,可靠的消息队列解决方案可以直接使用,而无需构建任何东西。 – 2011-06-01 13:44:32

+1

您提出的问题相当基本,所以我认为使用ActiveMQ等即时可用的消息传递系统会更好。 – Waldheinz 2011-06-01 13:45:56

+0

我需要将它们存储在数据库中以供将来参考,它不是聊天,它更类似于邮件系统。如果我错过了某些东西,您能否提供一个链接以及您的意思示例? – 0plus1 2011-06-01 13:48:17

我也做了同样在不久前,开始了与方法1.但随后使用者应该能够将消息发送到多个用户。如果n个收件人被寻址,突然接近1次将每条消息保存n次。所以如果这是可能的话,我认为2更好。

+0

的确是这样..我没有想过这个,谢谢! – 0plus1 2011-06-01 14:03:01

一般来说,少加入你所要做的,更好的查询将执行。因此,第一个选项可能会是一个更好的选择,因为您将拥有一个非常大的数据库。

基本上,您将需要忽略一些数据库规范化技术以获得所需的性能。但是,尽量不要限制自己。例如,如果您的消息发送给多个人,则需要选择选项二或找出处理此问题的其他方法。

对于大型数据库设计资源,这里是一个为Microsoft SQL Server,但它的很多讨论将适用的东西:

http://sqlcat.com/

你的第二个模式是更加规范化。两者都可以接受。适当规范化的数据库设计更清洁,但由于性能原因,许多DBA使用denormalisation。我会使用第二个模式,直到遇到性能问题时,我认为这将是更好的方法。

请注意,正常化程度通常被许多人视为矫枉过正,正如其他人发布的那样。我从习惯和12年前学过的旧的(现在过时的)DB理论课程那样做。

快乐编码