Внешний ключ для идентификации отношений - PullRequest
0 голосов
/ 29 июня 2018

Давайте начнем с быстрого определения идентифицирующих отношений, которые я нашел в сети:

Идентифицирующая связь - это когда наличие строки в дочерней таблице зависит от строки в родительской таблице, это означает, что первичный ключ дочерней таблицы содержит столбец, который принадлежит внешнему ключу, ссылающемуся на родительский. таблица.

Мой пример: я использую SQL Server, и мой пример следующий:

  1. Я создал таблицу данных для хранения данных о схемах (метаданных), и да, информации sys views недостаточно, если вам интересно:)

    Моя таблица метаданных называется Schemas_Metadata и имеет столбец Name в качестве первичного ключа.

    Schemas_Metadata
    ----------------
    PK (Name)
    
  2. Я создал другую таблицу метаданных для хранения данных о таблицах, и моя таблица метаданных называется Tables_Metadata и имеет столбец Name и столбец Schema_Name (внешний ключ ссылается на столбец Name в Schemas_Metadata таблица) и составной первичный ключ (Schema_Name, Name). Это идентифицирующие отношения.

    Tables_Metadata
    PK (Schema_Name, Name)
    
  3. Я создал еще одну таблицу метаданных для хранения данных о столбцах с именем 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 в таблице Columns_Metadata и нужно ли мне создавать столбцы, которые мне не нужны каждый раз, когда я создаю внешний ключ для идентифицирующего отношения или есть лучший способ сделать это?

1 Ответ

0 голосов
/ 29 июня 2018

Во-первых, позвольте мне выразить свое мнение о том, что уже существующий дизайн информационной схемы и схемы sys очень сложен, углублен и сложен по сравнению с вашим вопросом, который, если мы на мгновение забудем, что его СОДЕРЖАНИЕ относится к метаданным, это очень простой случай оформления стола. Таким образом, я сомневаюсь, что вам нужно создать другую схему.

Чтобы ответить на ваш вопрос: я бы создал столбец id в Tables_Metadata, поместил бы PK только в id и добавил бы уникальное проверочное ограничение (имя_схемы, имя).

Тогда таблица Columns_Metadata должна иметь только два поля: Name и Tables_Metadata_id FK to Tables_Metadata.id

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...