选择超类型/子类型SQL模式中的所有完整记录



在关系超类型/子类型结构中,例如,我有一个具有entity_type列和多个子类型表的超类型表entity,有没有任何方法可以查询所有实体及其完整记录,即以某种方式自动连接到每个子类型表?

因此,使用:

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等(如果记录为建筑物),该怎么办?我曾想过将子类型表名称存储在类型表中,但我知道不能动态引用这样的名称。

我在这里是一个无知的DB新手吗?还是在没有明确定义联接并对每个子类型表进行查询的情况下,这在任何方面都是可能的?

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

在MySQL中工作,没有引擎偏好。

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

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

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

最新更新