识别关系的外键

时间:2018-06-29 17:06:21

标签: sql sql-server database database-design relational-database

让我们先快速定义我在网络上发现的识别关系:

一种确定的关系是,子表中是否存在一行依赖于父表中的一行,这意味着子表的主键包含一列,该列属于引用父项的外键表。

我的示例:我使用SQL Server,而我的示例如下:

  1. 我创建了一个数据表来存储有关架构(元数据)的数据,是的,如果您想知道的话,系统视图信息还不够:)

    我的元数据表称为Schemas_Metadata,其中有一个Name列作为主键。

    Schemas_Metadata
    ----------------
    PK (Name)
    
  2. 我创建了另一个元数据表来存储有关表的数据,我的元数据表称为Tables_Metadata,并具有一个Name列和一个Schema_Name列(引用{ Name表中的{1}}列)和组成的主键(Schemas_Metadata)。这是一种识别关系。

    Schema_Name, Name
  3. 我创建了另一个元数据表来存储名为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_NameTable_Name,并且我是否必须创建每次创建索引时都不需要的列确定关系的外键,还是有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

首先,让我表达一下我的观点,即与您的问题相比,信息模式和sys模式已经存在的设计非常复杂,深入和复杂,如果您暂时忘记其内容与元数据有关,是一个非常简单的表设计案例。因此,我怀疑您需要创建另一个架构。

要回答您的问题:我将在Tables_Metadata上创建一个id列,将PK单独放在id上,并添加唯一的检查约束(schema_name,name)。

然后,Columns_Metadata表仅需要具有两个字段:Name和Tables_Metadata_id FK至Tables_Metadata.id