怎么设计这个数据库

怎么设计这个数据库

如何设计这个数据库?

事情经过

一位帅哥(id为1)送了999朵玫瑰花给一位美女(id为2)

数据记录在history_logs1表中

history_logs1表如下

user_id  friend_id  event_id  date_event      number

2     1      10     2010-02-14 10:37:21  999

event_id=10表示送玫瑰花

这位帅哥又邀请这位美女一起去看电影

数据记录在history_logs2表中

history_logs2表如下

user_id  friend_id  event_id  date_event

2     1      11     2010-02-14 20:30:05

event_id=11表示邀请您一起去看电影

美女来了以后,系统要将帅哥的两条消息按照时间排序以下面的形式展现给美女

[2010-02-14 10:37:21]您的好友[帅哥]送给您[999]朵玫瑰花

[2010-02-14 20:30:05]您的好友[帅哥]邀请您一起去看电影

[]中的数据从数据库中读取,其他描述性文字都是预先根据event_id设定好的

1,请问SQL语句应该怎么写?

2,另一种设计方案是将所有消息都储存在history_logs1表中,但是类似邀请去看电影的消息就会有number这个字段是冗余的,这个表储存着1000W条以上的记录

3,这样设计数据库是否合理?如果有好的方案,请指教



为什么不放在一个表中?

user_id  friend_id  event_id  date_event      number

2     1      10     2010-02-14 10:37:21  999

2     1      11     2010-02-14 20:30:05  null




SELECT * FROM (

SELECT * FROM history_logs1

UNION

SELECT * FROM history_logs2) AS V

WHERE V.user_id=#####




我同意1楼的方案。放在一个表中比较恰当。 在数据库设计时,有适当的冗余是完全可以的。如果在数据库设计中要完全避免冗余,那么设计出来的数据库是不怎么样的。

其实我们在设计数据库的时候,并不需要100%避免冗余,或者必须要遵守范式的要求。只要设计出来的数据库可以使性能增加或者更加的合理,并不需要循规蹈矩的去按资料的办法去做。

有句话说的好,适当的冗余可以使数据库设计得更加合理。

怎么设计这个数据库

相关文章:

你感兴趣的文章:

标签云: