Database 用于从多个可能的外部表中选择一个的DB设计
假设我有两个或多个截然不同的对象,每个对象都由数据库中的一个表表示。称这些为文章、书籍等等。现在假设我想为每个对象添加注释功能。注释在每个对象中的行为完全相同,因此理想情况下,我希望在一个表中表示它们 然而,我不知道一个好方法来做到这一点。我知道如何做到这一点的方法有:Database 用于从多个可能的外部表中选择一个的DB设计,database,database-design,schema,Database,Database Design,Schema,假设我有两个或多个截然不同的对象,每个对象都由数据库中的一个表表示。称这些为文章、书籍等等。现在假设我想为每个对象添加注释功能。注释在每个对象中的行为完全相同,因此理想情况下,我希望在一个表中表示它们 然而,我不知道一个好方法来做到这一点。我知道如何做到这一点的方法有: 为每个对象创建注释表。还有文章评论、书籍评论等等。每个对象都有一个外键列指向相应的对象 创建一个全局注释表。具有引用“书”或“文章”的注释类型。每个对象都有一个可为null的外键列,并使用comment_类型确定要使用的外键
- 为每个对象创建注释表。还有文章评论、书籍评论等等。每个对象都有一个外键列指向相应的对象李>
- 创建一个全局注释表。具有引用“书”或“文章”的注释类型。每个对象都有一个可为null的外键列,并使用comment_类型确定要使用的外键
上述任何一种方法都需要在每次添加新对象时更新模型/db。有更好的方法吗?我个人认为您的第一个选项是最好的,但我会将此选项用于样式点: 评论有一个自然的结构。你有第一条评论,也许是关于评论的评论。这真是一棵评论树 如果向指向注释树根的每个对象添加一个字段,会怎么样。然后您可以说,“检索第123条的注释树”,然后您可以获取根,然后基于一个注释表构建树
注意:我仍然最喜欢选项1 还有一种策略:从一个公共表继承不同类型的“可注释”对象,然后将注释连接到该表: 这三种策略都是有效的,各有利弊:
注释\u类型
——它可以从非空字段推断出来1又名。类别、子类化、泛化层次结构。。。有关继承的更多信息,请参阅中的“子类型关系”部分。第三种方法非常好。。。但是如何实现它呢?是否有任何ORM本机支持此功能?在实践中,它本质上是第一个选项吗?@tomo.otsuka请按照链接获取关于继承实现的一些提示-有3个主要变体(每个变体都有自己的优缺点)。我不确定ORM是否支持。