多个表需要一对多的关系

asc*_*bol 16 sql database-design

我有一个包含多个表的SQL数据库:A,B,C,D.这些表中的实体是完全不同的东西,具有不同的列,以及它们之间的不同类型的关系.
然而,它们都有一个共同点:在这种情况下,对评论系统的需求将具有相同的结构:author_id,date,content等.

我想知道哪种策略最适合这种模式使用A,.. D表使用注释系统.在一个经典的"博客"网站中,我会在"评论"表中使用一对多的关系与post_id.

这看起来我需要一个A_comments,B_comments等表来处理这个问题,这看起来有点奇怪.

有没有更好的办法 ?

Mar*_*tos 14

创建一个comment包含comment_id主键和注释的各种属性的表.

另外,创建A_comment如下:

CREATE TABLE A_comment (
    comment_id PRIMARY KEY REFERENCES comment(comment_id),
    A_id REFERENCES A(A_id)
)
Run Code Online (Sandbox Code Playgroud)

同样适用于B,C和D.这确保了comment所有其他表之间的参照完整性,如果直接将ID存储到A,B,C和D中,则无法执行comment.

声明A_comment.comment_id为主键可确保注释只能属于A中的一个条目.它不会阻止注释属于A中的条目和B中的条目,但是只能通过外键实现这一点.这将需要数据库级约束,我知道没有数据库支持.

这种设计也不能阻止孤立的注释,但我想不出任何方法可以在SQL中阻止这种情况,当然,除了你想要避免的事情之外:创建多个注释表.


Cze*_*ogy 5

我有一个类似的“问题”,其中包含更多不同对象类型的注释(例如,在我的情况下,文章和商店,每种类型都有自己的表)。

我做了什么:在我的评论表中,我有两列管理链接:

  • object_type( ENUM 类型) 决定我们要链接到的对象/表,以及
  • object_id (与其他表(或其中最大的)的主键匹配的无符号整数类型)指向特定表中的确切行。

该柱结构则是:idobject_typeobject_idauthor_iddatecontent,等。

这里重要的是在两列上都有一个索引,(object_type, object_id),以加快索引速度。