Внешний ключ обязательно должен быть ключом-кандидатом для таблицы (скажем, table1)?Я знаю, что внешний ключ ссылается на первичный ключ какой-то другой таблицы (скажем, table2).Но для таблицы1 нужно ли, чтобы это был ключ-кандидат?
По определению внешний ключ необходим для ссылки на ключ-кандидат в целевой таблице (таблица2 в вашем вопросе).Внешний ключ не обязательно должен быть ключом-кандидатом в таблице , ссылающейся на , или быть частью ключа-кандидата в этой таблице.
Нет. Вы можете иметь отношение 1: N, требование FK просто говорит, что поле должно существовать в другой таблице. Является ли это поле уникальным или нет, не имеет значения.
Для справки:
ключ-кандидат является альтернативой PK, это может быть одно поле или комбинация полей (как в сцепленном ключе)
employee_id
ssn
объединенный ключ - это несколько полей, которые составляют уникальность записи, которая может быть альтернативой PK или вместе выступать в роли PK
, поскольку СУБД следуют как минимум за 1NF, все поля таблицы могут использоваться в качестве связанного ключа Примечание: это плохой выбор и служит только примером
воспринимайте поле employee_id как один PK таблицы, но комбинация firstname, lastname и startdate, вероятно, будет однозначно идентифицировать всех на вашем столе сотрудников Примечание: это пример, на практике, вероятно, будут лучшие альтернативы этому
firstname
lastname
startdate