基本SQL建模问题

时间:2011-08-02 15:19:28

标签: mysql sql database-design relational-database modeling

我面临着需要引用不同类型数据的情况。

直截了当它是一个通知系统,用户可以在其关注的网页上收到有关新评论的通知,或回复他们所关注的评论。

我有以下(简化)布局

表:评论

comment_id (int) PRIMARY # primary key
entry_id (int) NULL # id of the webpage (entry), null if reply to  existing comment
comment_parentid NULL # parent id of comment if reply, null if root comment

表:粉丝

user_id (int) # the user following
entry_id (int) NULL # webpage the user follows, null if it this entry is only for following replys to a specific comment
comment_parentid NULL # comment the user follows replys to, null if the user if this following entry represents following of the complete post on the webpage (notification for all new comments)

如您所见,只有填充了一个有问题的字段(entry_id,comment_parentid)才有意义。

我在查找下表的主键时也遇到了问题。因为主键不能包含可空字段。

因此我认为我只创建一个名为“parent_id”或“followed_item_id”的字段,并设置一个额外的枚举标志它是什么样的父ID。

所以下表如下:

user_id (int) PRIMARY 
followed_item_id (int) PRIMARY
followed_item_type ENUM('entry','comment') PRIMARY

应用相同的建模技术,注释表将如下所示:

comment_id (int) PRIMARY # primary key
comnent_parentid_type ENUM('entry','comment') # parent id type. entry or comment.
comment_parentid (int) # parent id representing comment or entry

但是我记得我曾经遇到过一个问题,我想做类似的事情,但有很好的反对意见。我只是记不起来,找不到帖子。

那么构建这种数据的好方法是什么?

我用两个UNION语句选择的Maby两个表?

1 个答案:

答案 0 :(得分:0)

针对“组合”表的论点是,您不能拥有任何参照完整性,并且您必须自己管理任何级联删除。

似乎可以让两个表工作,例如follow_entries和follow_comments。

祝你好运。