我有两张桌子pages(id,name)
和posts(id,msg)
在pages
和posts
中id
字段自动递增并从1开始
我希望在用户喜欢post
或page
时创建类似的表格,应将其存储在相似的表格中。
我的问题是我应该使用与post
和pages
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
我应该使用哪种方法?为什么? 有更好的方法吗?
答案 0 :(得分:0)
如果你有两个不同的键自动为页面和帖子递增,我肯定会使用两个单独的表。对于你们两个有一个帖子和一个包含两组不同键的页面来说没有意义。
答案 1 :(得分:0)
在提出的选择中,你绝对应该选择第一个。替代方法会阻止您声明FOREIGN KEY,并且在应用程序代码中强制引用完整性为surprisingly difficult。
话虽如此,还有第三种选择:从一个共同的“超级表”“继承”post
和page
,然后直接像超级表一样。这可能不仅仅适用于两种子类型,但如果您预计模型将来会增长,则可能非常有用。我已经描述了基本概念here。