gpt4 book ai didi

database - 从多个可能的外部表中选择一个的数据库设计

转载 作者:搜寻专家 更新时间:2023-10-30 20:57:57 24 4
gpt4 key购买 nike

假设我有两个或更多截然不同的对象,每个对象都由数据库中的一个表表示。将这些称为文章、书籍等。现在说我想为这些对象中的每一个添加评论功能。注释在每个对象中的行为完全相同,因此理想情况下我想在一个表中表示它们。

但是,我不知道这样做的好方法。我知道如何做到这一点的方法是:

  • 为每个对象创建一个评论表。还有 Article_comments、Book_comments 等等。每个对象都有一个指向适当对象的外键列。
  • 创建一个全局评论表。有一个引用“书”或“文章”的评论类型。每个对象都有一个可为空的外键列,并使用 comment_type 确定要使用的外键。

每次添加新对象时,上述任何一种方法都需要更新模型/数据库。有没有更好的办法?

最佳答案

还有另一种策略:继承1 一个公用表中的不同类型的“可评论”对象,然后将评论连接到该表:

enter image description here

所有 3 种策略都是有效的并且各有利弊:

  1. 单独的评论表很干净,但需要在 DML 和可能的客户端代码中重复。此外,除非您采用某种形式的继承,否则不可能对它们强制执行公共(public) key ,这就引出了一个问题:为什么不首先直接使用 (3)?
  2. 具有多个 FK 的评论表将有很多 NULL(这可能是存储和缓存方面的问题,也可能不是问题),并且每当出现一种新的“可评论”对象时,都需要向评论表添加一个新列添加到数据库中。顺便说一句,您不一定需要 comment_type - 它可以从非 NULL 字段推断
  3. 当前的关系 DBMS 不直接支持继承,它有自己的一组 engineering tradeoffs .从好的方面来说,它可以轻松添加新型可评论对象,而无需更改模型的其余部分。

1 又名。类别、子类化、泛化层次结构...有关继承的更多信息,请查看 ERwin Methods Guide 的“子类型关系”部分.

关于database - 从多个可能的外部表中选择一个的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14408992/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com