Вопрос:

У вас есть таблица с полями «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 содержит как имя, так и фамилию, что нарушает принцип атомарности.

Как привести в нормальное состояние:

  1. Создать новые столбцы: Команды ALTER TABLE users ADD COLUMN fname VARCHAR(20) NOT NULL и ALTER TABLE users ADD COLUMN lname VARCHAR(20) добавят два новых столбца: fname (для имени) и lname (для фамилии).
  2. Разделить данные: Команда UPDATE users SET fname = SUBSTRING_INDEX (names,' ',1) извлечет первую часть из столбца names (до первого пробела) и запишет ее в столбец fname. Эта часть обычно соответствует имени.
  3. Заполнить столбец фамилии: После выполнения предыдущей команды, столбец lname будет содержать NULL, так как в запросе нет явного указания на заполнение фамилии. Для полноценной нормализации потребуется дополнительная логика для извлечения фамилии из исходного столбца names (например, если имя всегда одно слово, то все остальное — фамилия).

Что сделают команды:

  • Будут созданы два новых столбца: fname и lname.
  • Столбец fname будет заполнен именами (часть строки names до первого пробела).
  • Столбец lname будет заполнен значениями NULL.

Ответ: Таблица не в нормальном состоянии. Команды создадут столбцы fname и lname, заполнят fname именами, а lname останется NULL.

ГДЗ по фото 📸
Подать жалобу Правообладателю