将一个表中的多个外键定义为多个表

gal*_*han 14 database-design foreign-keys

我有3个型号:

发布:

  • ID
  • 标题
  • 身体

照片:

  • ID
  • 文件路径

评论:

  • ID
  • POST_ID
  • 身体

DB中的相应表格.现在,如果我只想为我的帖子发表评论,我可以简单地添加以下外键:ALTER TABLE comment ADD FOREIGN KEY (post_id) REFERENCES post (id).但我希望对其他模型(照片,个人资料,视频等)发表评论,并将所有评论保存在一个表格中.在这种情况下,如何定义外键(我肯定需要ORM的FK)?

Álv*_*lez 10

你可以这样做:

 post:
  * post_id (PK)
  * title
  * body

 photo:
  * photo_id (PK)
  * filepath

 comment:
  * comment_id (PK)
  * body

 comment_to_post
  * comment_id (PK) -> FK to comment.comment_id
  * post_id (PK) -> FK to post.post_id

 comment_to_photo
  * comment_id (PK) -> FK to comment.comment_id
  * photo_id (PK) -> FK to photo.photo_id
Run Code Online (Sandbox Code Playgroud)

仍然有可能有一个属于两个不同项目的评论.如果您认为这是一个问题,我可以尝试改进设计.

  • 1.这才是正确的方法。逻辑级别的多对多*关系*在物理级别实现为关联*表*。许多表都是规范化数据库的本质;连接不会“花费”任何东西。 (2认同)

Dam*_*vic 10

找到帖子,个人资料等常见的东西 - 我用过Entity的是缺少更好的单词,然后是子类型.

  • 在此模型中,一个实体可以有许多注释,一个注释只属于一个实体.

替代文字

  • 这是一个很好的*通用*设计技术。**如果**这四个实体有共同的列,并且可以归一化为一个超类型,这是一个进步;**如果不是**,这是一个需要额外定义的障碍(例如,没有共同的评论)(例如,不允许个人资料有评论)。即,您正在解决未发布的问题。 (3认同)