子类型还是单独的表?

时间:2011-10-10 16:08:36

标签: relational-database

我有以下实体:书籍,作者和商店。

每个人都可以有评论部分。我应该将评论存储在单独的表中还是具有子类型/超类型设计?如果我使用单独的表格在技术上是错误的吗?因为无论哪种方式,它可能需要相同数量的工作,或者如果超类型层次结构针对任何子类型发生更改,则子类型设计可能需要更多工作。

1 个答案:

答案 0 :(得分:0)

超类型和子类型攻击问题“这些事情并不完全相同,但它们也没有完全不同。”

超类型/子类型设计要求某些属性存储在超类型中,有些属性存储在子类型中。现实世界中每件事物的属性在两个表之间分开。

您如何决定如何拆分属性? 所有子类型共有的属性“向上”移动到超类型中。因此,如果你是从公司和个人开始,他们并不完全相同,因为

  • 一个是个人,另一个是(概念上)一群个人,
  • 一个人可以生孩子,另一个人不能,
  • 一个人可以结婚,另一个人不能

等等。

他们并没有完全不同,因为

  • 两者都可以有多个地址,电话号码,电子邮件地址,网站等,
  • 两者都可以与其他公司签订合同,
  • 两者都可以与其他人签订合同,
  • 两者都需要提交纳税申报表

等等。

两者共同的属性(合法名称,至少)将“向上”冒泡到超类型中。

但是,在您的情况下,书籍,作者和商店如何适应该分析并不清楚。很明显,它们并不完全相同。但他们完全不同吗?我想是的。

如果您正在谈论有关书籍,人物和商店的网站帖子,那就是另一回事。 answer to a similar SO question包含代码。