我应该使用一个表还是多个表

时间:2014-02-26 05:59:02

标签: mysql database-design

我有两张桌子pages(id,name)posts(id,msg)pagespostsid字段自动递增并从1开始

我希望在用户喜欢postpage时创建类似的表格,应将其存储在相似的表格中。

我的问题是我应该使用与postpages

不同的表格
  1) page_like(page_id,user_id);// (page_id,user_id) composite PK
   2) post_like(post_id,user_id);//(post_id,user_id) composite PK

或者我应该使用

 like(element_id,element_type,liked_by) //(element_id,element_type,liked_by) composite PK

我应该使用哪种方法?为什么? 有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

如果你有两个不同的键自动为页面和帖子递增,我肯定会使用两个单独的表。对于你们两个有一个帖子和一个包含两组不同键的页面来说没有意义。

答案 1 :(得分:0)

在提出的选择中,你绝对应该选择第一个。替代方法会阻止您声明FOREIGN KEY,并且在应用程序代码中强制引用完整性为surprisingly difficult

话虽如此,还有第三种选择:从一个共同的“超级表”“继承”postpage,然后直接像超级表一样。这可能不仅仅适用于两种子类型,但如果您预计模型将来会增长,则可能非常有用。我已经描述了基本概念here