0

Существуют ли общие соображения проектирования (хорошие/плохие/нейтральные) для использования внешнего ключа одной таблицы в качестве первичного ключа в другой таблице?Вопросы проектирования с использованием внешнего ключа в качестве основного ключа

Например, предположим, что следующие таблицы как часть каталога фильма:

titles 
------ 
id 


episodes 
-------- 
title_id (PK/FK) 

Эпизоды, очевидно, может быть сделано как с идентификатором и title_id, где идентификатор будет являться PK и title_id будет UNIQUE, но поскольку title_id уже уникален и, технически, идентифицирует эпизод, было ли что-нибудь, что можно было бы рассмотреть, просто используя его как ПК? А вообще? Какие конструктивные соображения вы можете учесть?

Спасибо за ваши мысли!

+0

Возможно ли иметь несколько эпизодов с одним и тем же названием (например, название действует как название серии)? Может ли быть название без хотя бы одного эпизода? –

+0

Не может быть нескольких эпизодов с одним и тем же названием. Да, может быть название без эпизода. Существуют названия разных типов. Заголовки эпизода типа будут иметь эпизод. –

+0

Тогда это выглядит подходящим. Фактически вы реализуете форму наследования (см. Раздел «Физическое представительство» [этот пост] (http://stackoverflow.com/a/12037398/533120)). Добавление суррогатного ключа в этом случае было бы нецелесообразным. –

ответ

0

Ответ на ваш вопрос - это в основном описание техники, известной как «общий первичный ключ». Соответственно, я заменил два тега о первичном и внешнем ключах с помощью единого тега shared-primary-key.

Общий первичный ключ - это проект, в котором ПК одной таблицы также является FK, который ссылается на PK другой таблицы. Как указывает тег wiki для shared-primary-key, это полезно для отношений один к одному, независимо от того, являются ли они обязательными или необязательными. Эти отношения иногда называются отношениями IS-A, так как «автомобиль - это транспортное средство». Связь между транспортными средствами и авто также известна как отношение класса/подкласса или типа/подтипа.

Как и любая техника проектирования, он имеет свои преимущества и свои затраты.

Редактировать в ответ на комментарий:

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

Второе преимущество заключается в том, что соединение между двумя таблицами просты и быстры. Это быстро (для некоторых систем баз данных) из-за того, что индексы, созданные для поддержки ПК, используются оптимизатором для ускорения соединения.

Третье преимущество заключается в том, что третья таблица может ссылаться на обе эти две таблицы с тем же FK.

Стоимость заключается в том, что есть несколько программ, связанных с добавлением новой записи в обе таблицы. ПК из первичной таблицы необходимо скопировать во вторичную таблицу, и система обычно не сделает этого для вас. Кроме того, соединение, хотя и быстрое, не является бесплатным.

+0

Ну, конечно ... вот что я прошу. Какие выгоды и издержки? (Спасибо за то, что указали мне на тэг основного ключа). –

Смежные вопросы