0

在关系超类型/子类型结构中,例如,我有一个entity包含一entity_type列和许多子类型表的超类型表,有什么方法可以查询所有实体及其完整记录,即以某种方式加入每个子类型表自动?

所以,有:

TABLE entity
  -- entity_id (INT pk)
  -- entity_type_id (INT fk)

TABLE entity_type
  -- entity_type_id (INT pk)
  -- name  //Person, Building, Animal (TEXT)

TABLE person
  -- entity_id (INT fk)
  -- person_name (TEXT)
  -- person_age (INT)

TABLE building
  -- entity_id (INT fk)
  -- age_built (INT)

等等

如果我想查询所有实体,如果记录是人,并且在我的结果集中获取所有特定于人员的列(person_name等)age_built,如果记录是建筑物,该怎么办?我考虑过将子类型表名称存储在类型表中,但了解您不能动态引用这样的名称。

我在这里是一个无知的数据库新手,还是在没有明确定义连接并对每个子类型表进行查询的情况下以任何方式可能?

我问这个是因为在我的数据库的其他地方我会有很多对一个entity_id(可能是任何类型的实体)的引用,我不想运行一个初始查询来首先检查它的类型。

在 MySQL 中工作,不喜欢引擎。

4

1 回答 1

0

除非您真的知道自己在做什么,否则不要这样做(然后可能不这样做!)。这适合实体属性值 anitpattern。最好分别建模与每个人/动物/建筑物相关的实体。

https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:2314483800346542969

或者你可以考虑从实体类型到链接实体有多个 fk 列。您希望有多少实体引用 entity_type?

于 2014-04-11T13:59:17.773 回答