Что использовать в качестве внешнего ключа, если нет совпадения в другой таблице - MySQL

Я работаю над модулем посещаемости/сверхурочной работы для веб-приложения расписания. Идея состоит в том, что в MySQL есть таблица смен, каждая смена имеет время начала и окончания. Менеджер выберет смену и внесет запись в таблицу посещаемости, указав, опаздывал ли сотрудник/опаздывал/уходил ли раньше/отрабатывал сверхурочно. Эта запись в таблице посещаемости привязана к идентификатору смены # (который является просто пронумерованным ключом).

Но если кто-то приходит в свой выходной день, нет никакой смены, к которой это можно было бы привязать. Какую систему лучше использовать для этих ключей? Можно ли настроить условное перечисление? И как избежать риска совпадения с идентификатором смены? Добавление сверхурочных смен обратно в исходную базу данных расписания невозможно.


person Anthony    schedule 25.07.2009    source источник


Ответы (2)


Как и в предыдущем вопросе, если данных нет, то подходит NULL. В этом случае работа не привязана к конкретной смене, так что еще можно туда поставить? И снова статус должен отражать это.

person cletus    schedule 25.07.2009
comment
Но если я использую null, ключ не будет уникальным. Разве это не проблема? - person Anthony; 25.07.2009
comment
на самом деле, я только что понял, что это внешний ключ и что я могу просто иметь отдельный перечисляемый столбец для первичного ключа. Спасибо вам и Райану за то, что заставили меня задуматься. - person Anthony; 25.07.2009

Что не так с добавлением дополнительного ключа в ваш столбец enum? Это не повредит существующему коду и кажется мне лучшим решением.

person Ryan Ballantyne    schedule 25.07.2009