让我们先快速定义我在网络上发现的识别关系:
一种确定的关系是,子表中是否存在一行依赖于父表中的一行,这意味着子表的主键包含一列,该列属于引用父项的外键表。
我的示例:我使用SQL Server,而我的示例如下:
我创建了一个数据表来存储有关架构(元数据)的数据,是的,如果您想知道的话,系统视图信息还不够:)
我的元数据表称为Schemas_Metadata
,其中有一个Name
列作为主键。
Schemas_Metadata
----------------
PK (Name)
我创建了另一个元数据表来存储有关表的数据,我的元数据表称为Tables_Metadata
,并具有一个Name
列和一个Schema_Name
列(引用{ Name
表中的{1}}列)和组成的主键(Schemas_Metadata
)。这是一种识别关系。
Schema_Name, Name
我创建了另一个元数据表来存储名为Tables_Metadata
PK (Schema_Name, Name)
的列的数据,它也有一个Columns_Metadata
列,一个Name
列和一个不幸的是Table_Name
列(Schema_Name
是引用Table_Name, Schema_Name
表中Schema_Name,Name
列的外键),也是组成的主键(Tables_Metadata
的主键。这也是一种识别关系。
Schema_Name, Table_Name, Name
我的问题:
在第三级,我是否需要在Columns_Metadata
PK (Schema_Name, Table_Name, Name)
表中创建两个列Schema_Name
和Table_Name
,并且我是否必须创建每次创建索引时都不需要的列确定关系的外键,还是有更好的方法呢?
答案 0 :(得分:1)
首先,让我表达一下我的观点,即与您的问题相比,信息模式和sys模式已经存在的设计非常复杂,深入和复杂,如果您暂时忘记其内容与元数据有关,是一个非常简单的表设计案例。因此,我怀疑您需要创建另一个架构。
要回答您的问题:我将在Tables_Metadata上创建一个id列,将PK单独放在id上,并添加唯一的检查约束(schema_name,name)。
然后,Columns_Metadata表仅需要具有两个字段:Name和Tables_Metadata_id FK至Tables_Metadata.id