识别关系的外键
Foreign key on identifying relationships
让我们从我在网上找到的识别关系的快速定义开始:
一个标识关系是当子 table 中的一行的存在依赖于父 table 中的一行时,这意味着子 table 的主键=61=] 包含属于引用父 table.
的外键的列
我的示例:我使用 SQL 服务器,我的示例如下:
我创建了一个数据 table 来存储关于模式的数据(元数据),是的,如果您想知道,系统视图信息是不够的:)
我的元数据 table 称为 Schemas_Metadata
并且有一个 Name
列作为主键。
Schemas_Metadata
----------------
PK (Name)
我创建了另一个元数据 table 来存储关于 table 的数据,我的元数据 table 被称为 Tables_Metadata
并且有一个 Name
列和一个 Schema_Name
列(外键引用 Schemas_Metadata
table 中的 Name
列)和一个组合主键 (Schema_Name, Name
)。这是一种识别关系。
Tables_Metadata
PK (Schema_Name, Name)
我创建了另一个元数据 table 来存储有关名为 Columns_Metadata
的列的数据,它也有一个 Name
列、一个 Table_Name
列和不幸的是,一个 Schema_Name
列(Table_Name, Schema_Name
是引用 Tables_Metadata
table 中的 Schema_Name,Name
列的外键和一个组合主键(Schema_Name, Table_Name, Name
).这也是一种识别关系。
Columns_Metadata
PK (Schema_Name, Table_Name, Name)
我的问题:
在第三层,我是否需要在 Columns_Metadata
table 中创建两列 Schema_Name
和 Table_Name
并且我是否必须创建我不需要的列每次我在识别关系上创建外键时都需要,或者有更好的方法吗?
首先,让我表达我的观点,即与您的问题相比,信息模式和 sys 模式的现有设计非常精细、深入和复杂,如果我们暂时忘记它的内容所涉及的问题元数据,是 table 设计的一个非常简单的案例。因此,我怀疑您是否需要制作另一个架构。
回答你的问题:我会在 Tables_Metadata 上创建一个 id 列,将 PK 单独放在 id 上,并添加一个检查约束 unique (schema_name,name).
那么,Columns_Metadatatable只需要两个字段:Name,和Tables_Metadata_id FK to Tables_Metadata.id
让我们从我在网上找到的识别关系的快速定义开始:
一个标识关系是当子 table 中的一行的存在依赖于父 table 中的一行时,这意味着子 table 的主键=61=] 包含属于引用父 table.
的外键的列我的示例:我使用 SQL 服务器,我的示例如下:
我创建了一个数据 table 来存储关于模式的数据(元数据),是的,如果您想知道,系统视图信息是不够的:)
我的元数据 table 称为
Schemas_Metadata
并且有一个Name
列作为主键。Schemas_Metadata ---------------- PK (Name)
我创建了另一个元数据 table 来存储关于 table 的数据,我的元数据 table 被称为
Tables_Metadata
并且有一个Name
列和一个Schema_Name
列(外键引用Schemas_Metadata
table 中的Name
列)和一个组合主键 (Schema_Name, Name
)。这是一种识别关系。Tables_Metadata PK (Schema_Name, Name)
我创建了另一个元数据 table 来存储有关名为
Columns_Metadata
的列的数据,它也有一个Name
列、一个Table_Name
列和不幸的是,一个Schema_Name
列(Table_Name, Schema_Name
是引用Tables_Metadata
table 中的Schema_Name,Name
列的外键和一个组合主键(Schema_Name, Table_Name, Name
).这也是一种识别关系。Columns_Metadata PK (Schema_Name, Table_Name, Name)
我的问题:
在第三层,我是否需要在 Columns_Metadata
table 中创建两列 Schema_Name
和 Table_Name
并且我是否必须创建我不需要的列每次我在识别关系上创建外键时都需要,或者有更好的方法吗?
首先,让我表达我的观点,即与您的问题相比,信息模式和 sys 模式的现有设计非常精细、深入和复杂,如果我们暂时忘记它的内容所涉及的问题元数据,是 table 设计的一个非常简单的案例。因此,我怀疑您是否需要制作另一个架构。
回答你的问题:我会在 Tables_Metadata 上创建一个 id 列,将 PK 单独放在 id 上,并添加一个检查约束 unique (schema_name,name).
那么,Columns_Metadatatable只需要两个字段:Name,和Tables_Metadata_id FK to Tables_Metadata.id