Sql 在Postgre中设计多个1对1关系的最佳方式是什么

Sql 在Postgre中设计多个1对1关系的最佳方式是什么,sql,database,postgresql,database-design,Sql,Database,Postgresql,Database Design,我想知道是否有更好的方法来设计Postgre内部的这种关系: 基本上,我有一些实体,要么是EntityA,要么是EntityB,要么是EntityC。在本例中,我将在实体和其他东西(如注释)之间建立大量其他关系,因此我得到了这个通用实体,它定义了它链接到的实体类型 例如,如果我们有一个EntityA链接到一个注释,则实体条目如下所示: 类型:EntityA 实体a\u id:x 实体_b_id:null 实体\u c\u id:空 有更好的设计方法吗?这似乎很适合该功能 这样,实体类型就不包括

我想知道是否有更好的方法来设计Postgre内部的这种关系:

基本上,我有一些实体,要么是EntityA,要么是EntityB,要么是EntityC。在本例中,我将在实体和其他东西(如注释)之间建立大量其他关系,因此我得到了这个通用实体,它定义了它链接到的实体类型

例如,如果我们有一个EntityA链接到一个注释,则实体条目如下所示: 类型:EntityA 实体a\u id:x 实体_b_id:null 实体\u c\u id:空


有更好的设计方法吗?

这似乎很适合该功能


这样,实体类型就不包括其他类型的列

实体有什么不同

为什么不

CREATE TABLE Entity
(
    EntityId int,
    EntityType enum(A, B, C),
    FieldValue varchar(255)
) 
或者如果字段值明显不同,并且在单个列中没有意义

CREATE TABLE Entity
(
    EntityId int,
    EntityType enum(A, B, C),
    FieldValueX varchar(255),
    FieldValueY varchar(255),
    FieldValueZ varchar(255)
) 

实体表中的记录可以有a、b和c ID吗?是的,一次只能有一个字段类型中定义的ID。这将在以后给您带来很多麻烦-您将每次编写从实体连接到实体a、b和c的语句,因为它必须涵盖任何场景。实体应该在不同的表上,而不是在一个表上,它们之间的区别有多大?因此,不,实体表中的记录不能同时包含a、b和c。虽然它的角度是SqlServer和C代码,但用于建模多个子类继承的选项通常是按类型划分的表(您所做的),以及按层次划分的表(包含所有内容的大型表)。但是在基表中没有类型鉴别器和实体子类id,您可以在子类表上共享相同的实体id主键。在这种情况下,这是一种可怕的建模方式。提供一些表中的示例数据。我不希望最终得到一个包含多个无用字段的巨大表,这取决于表示的实体。事实上,将有5个完全不同的实体,至少有10个唯一的字段。我无法一次列出所有可用的实体并通过ID识别它们。其中一个用例是在Facebook上提到其中一个实体,如@,因此我需要一个列表,一次列出每个实体的唯一ID
CREATE TABLE Entity
(
    EntityId int,
    EntityType enum(A, B, C),
    FieldValueX varchar(255),
    FieldValueY varchar(255),
    FieldValueZ varchar(255)
)