Может ли CK иметь FK, ссылающийся на CK в другой таблице?

Например:

Department (**Dept**, Dept_name)  
Employee(**RegNo**, FirstName, LastName, BirthDate, Dept_fk, Salary, City)  

Dept_name — это CK таблицы отдела.

Может ли Dept_fk быть частью CK (Dept_fk, FirstName, LastName, Birthdate) в Employee, поскольку Dept_name не установлено в качестве первичного ключа в таблице Department?

РЕДАКТИРОВАТЬ: я изменяю имена некоторых атрибутов, чтобы их было легче понять. Dept_fk — это внешний ключ, ссылающийся на таблицу Dept in Department.


person Community    schedule 13.10.2015    source источник
comment
Вы имеете в виду внешний ключ, а не ключ-кандидат? Что значит относится? (Из вашего вопроса это, кажется, означает, что содержит те же атрибуты, что и.)   -  person philipxy    schedule 16.10.2015


Ответы (1)


Два определения «CK (ключ-кандидат) данной таблицы»:

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

Мы не можем определить CK таблицы без информации, необходимой для определения, которое мы используем. Например, все FD (функциональные зависимости), или каноническое покрытие FD, или все наборы столбцов, значения подстрок которых уникальны, и т. д. Эта информация всегда может быть выражена без участия другой таблицы.

Мы можем выбрать один CK таблицы, чтобы назвать его PK (первичный ключ). ПК не имеют отношения к реляционной теории. (Если вы используете метод ER и в нем есть правила о PK и CK, вам следует указать ссылку и пометить его.)

Отдел не может быть частью ключа-кандидата (например: отдел, имя, фамилия, дата рождения) в таблице сотрудников, поскольку отдел не установлен в качестве первичного ключа в таблице отдела

Отдел не является внутри Employee, поэтому он не может быть частью его CK. Но если вы его добавили, то был ли это CK от него не зависят другие таблицы.

Если вы спрашиваете, можете ли вы что-то сделать, основываясь на различии между Dept как CK и PK в Department: PK всегда не имеют значения.

Если "Dept" является опечаткой для "Dept#": Тот факт, что Dept# является или не является ПК таблицы отдела, не имеет отношения к CK другой таблицы. Будь то PK против CK, всегда не имеет значения.

Но могу ли я по-прежнему называть Dept ключом-кандидатом, просто зная, что Dept является ключом-кандидатом в таблице Department?

Это ЦК отдела. Так что по-английски мы можем сказать, что это CK. Но быть CK означает быть CK конкретной таблицы.

Возможно, вы имеете в виду «могу ли я по-прежнему называть Dept CK» сотрудника, просто зная...». Только если вы покажете, что это один. И является ли он одним, не зависит от какой-либо другой таблицы.

(Может быть, в этом вопросе вам следует назвать некоторые вещи FK?)

PS Столбец может появиться в нескольких таблицах без FK между ними. («Ссылка» полезна только тогда, когда вы говорите о FK.) Между разными столбцами могут быть FK. Существует FK тогда и только тогда, когда все значения подстроки в одном наборе столбцов появляются в другом ("ссылочном"). SQL FK должен идти только к суперключу (надмножеству CK), а не к CK. FK может быть из любого набора столбцов: FK — это только (супер)ключ в ссылочной таблице. Изучите определения FD, суперключа, CK, PK, FK (до CK или суперключа).

person philipxy    schedule 16.10.2015
comment
Опечатка, я все время имел в виду Dept. Таким образом, тот факт, что Dept# не является ПК таблицы отдела, не имеет отношения к CK другой таблицы, является ответом, который я искал. - person ; 17.10.2015
comment
Во-первых, я предлагаю в качестве заголовка: может ли CK иметь FK, связанный с CK в другой таблице? Чтобы упростить понимание, я также изменил имя атрибута Dept на Dept_Name. - person ; 18.10.2015
comment
Спасибо. Тем не менее, некоторые отделы все же есть. Они должны быть Dept#? или имя_отдела? Смесь? Также правильным термином для ссылки является ссылка. Почему FK теперь в вашем названии, но их нет в вашем вопросе? Пожалуйста, найдите время, чтобы отредактировать свой вопрос, чтобы он был четким, без опечаток и говорил, что вы имеете в виду, включая то, что вы предполагаете. и что вы хотите знать. И когда вы приводите пример, сначала скажите, что это за пример из. Почему вы не отвечаете на все мои вопросы? - person philipxy; 18.10.2015
comment
PS Что значит CK имеет FK? Вы имеете в виду, может ли это быть FK? CK представляет собой набор столбцов. FK — это список столбцов, ссылающихся на список столбцов, который является CK или суперключом (в зависимости от определения). К сожалению, вы постоянно используете повседневные непонятные слова вместо того, чтобы ссылаться на определенные вещи, их определенные части и свойства и определенные вещи, которые они делают. - person philipxy; 18.10.2015
comment
CK = Dept_fk, Имя, Фамилия, Дата рождения. ФК=Dept_fk. Я исправил имя атрибута Dept# как Dept_fk в соответствии с именем соглашения Oracle. Мой учитель просит нас использовать # как символ (не часть имени) для идентификации FK. - person ; 18.10.2015
comment
Спасибо. Но называть это _fk или знать, что это FK, не говорит, для чего это FK. Просто назовите его «Отдел» и скажите, что это FK в «Сотруднике», ссылающемся на отдел. (Как я только что прокомментировал.) Я до сих пор не понимаю, так как Dept_name... какое отношение Dept_name имеет к чему-либо? PS Пожалуйста, не удаляйте части вопросов (например, ваш последний абзац), на которые был дан ответ. Пожалуйста, просто уточните это. Пожалуйста, перечитайте мои комментарии. - person philipxy; 18.10.2015
comment
Хорошо .... это лучшее, что я могу сделать. Спасибо за попытку помочь. Если вы перечитали основной вопрос и детали в том виде, в каком они есть сейчас, и вы все еще не понимаете мой вопрос, удалите этот пост, пожалуйста. - person ; 18.10.2015