Вопрос:

У вас есть таблица с полями «id», «names», «birth». Пример заполнения первой строки: 1/Aleksander Pushkin/1799. Находится ли данная таблица в нормальном состоянии? Как её привести в нормальное состояние, если это необходимо? Что сделают команды ALTER TABLE users ADD COLUMN fname VARCHAR(20) NOT NULL, ADD COLUMN lname VARCHAR(20); UPDATE users SET fname = SUBSTRING_INDEX(names, ' ', 1)?

Ответ:

Таблица не находится в нормальном состоянии, поскольку поле names содержит два самостоятельных значения: имя и фамилию. Для первой нормальной формы значения должны быть атомарными.

Для приведения таблицы к нормальному состоянию следует разделить поле names на два поля: fname для имени и lname для фамилии, перенести в них соответствующие данные, а затем удалить поле names при необходимости.

Команда ALTER TABLE создаст столбец fname типа VARCHAR(20) с ограничением NOT NULL и столбец lname типа VARCHAR(20), допускающий значения NULL. Команда UPDATE заполнит fname первой частью значения names — подстрокой слева до первого пробела. Столбец lname этой командой не заполняется и останется со значениями NULL.

Ответ: правильен первый вариант.