Страницы

Поиск по вопросам

пятница, 12 апреля 2019 г.

Значения по умолчанию для полей в БД

Есть поле типа int которое может иметь а может не иметь значение.
Какое значение по умолчанию будет правильнее использовать в данной ситуации?
NULL нельзя,а если 0 то это может быть primary key в другой таблице.


Ответ

Раз у вас таблица (T1) хранит некое значение, которое в другой таблице (T2) является primary key, то установка некого специального значения отличного от NULL и не находящегося в T2 это странное решение. Оно конечно имеет право на жизнь, но используется в очень экзотических случаях.
В базах данных, при связи двух таблиц, значение NULL как раз используется для отражения факта отсутствия какого либо значения и, следовательно, необходимости такой связи у записи.
В реляционных базах данных рекомендуется делать внешние ключи (foreign key) для отражения связи двух таблиц. Наличие такого foreign призвано для обеспечения ссылочной целостности БД. Он не позволяет существовать в подчиненной таблице значениям, не существующим в основной таблице. При этом внешний ключ позволяет существовать NULL значению - как раз для отражения факта отсутствия связи.
Рекомендуемая структура таблиц (Отделы и сотрудники):
create table DEPT ( DEPT_ID INT not null auto_increment, DEPT_NAME VARCHAR(100), primary key (DEPT_ID) ) engine = InnoDB;
create table PERSON ( PERSON_ID INT not null auto_increment, NAME VARCHAR(100) not null, DEPT_ID INT, primary key (ID), FOREIGN KEY (DEPT_ID) REFERENCES DEPT(DEPT_ID) ) engine = InnoDB;
При отсутствии у сотрудника отдела к которому он относится DEPT_ID должен быть NULL

Комментариев нет:

Отправить комментарий