如何设计这个数据库?
事情经过
一位帅哥(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%避免冗余,或者必须要遵守范式的要求。只要设计出来的数据库可以使性能增加或者更加的合理,并不需要循规蹈矩的去按资料的办法去做。
有句话说的好,适当的冗余可以使数据库设计得更加合理。