Есть поле типа 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
Комментариев нет:
Отправить комментарий