Возможно ли иметь внешний ключ, который не покрывает весь первичный ключ указанной таблицы? - PullRequest
2 голосов
/ 14 августа 2011

У меня есть две таблицы:

Таблица A: с составным первичным ключом.

CommonID (PK) | Month (PK) | some data...
-----------------------------------------
1             | May 2011   | ...
1             | June 2011  | ...
2             | May 2011   | ...
2             | June 2011  | ...

Таблица B: ссылка на таблицу A

ID (PK) | A_CommonID (FK)| some data...
-----------------------------------------
...     | 1              | ...
...     | 2              | ...

Как вы можете видеть, таблица B не ссылается на весь первичный ключ, но она всегда будет ссылаться на уникальную запись в таблице A, потому что для указанного месяца используется глобальное значение, которое будет использоваться для A.Month в SQL-запросах.

Теперь мой вопрос: это разрешено или я нарушаю несколько правил проектирования баз данных?

Я был бы очень признателен за хороший ответ, потому что я буду использовать его в окончательном документе, который я должен написать для получения степени бакалавра.

Заранее большое спасибо!

1 Ответ

1 голос
/ 14 августа 2011

Нет, это не разрешено.

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

Внешний ключ должен ссылаться на первичный ключ, весь ключ и только на ключ (так вам поможет Кодд): -)

То, что вы могли бы сделать, это иметь отдельный уникальный индекс для этого столбца A_CommonID в Table A, чтобы ваш Table B мог ссылаться на этот уникальный индекс (вместо PK).

...