1NF обычно неправильно понимают.
Если вы прочитаете о повторяющихся группах в статье в Википедии о 1NF , я пойму, как вы могли прийти к выводу, что ваша таблица с атрибутами Address_1
, Address_2
,..., Address_6
нарушает 1NF.
Я предлагаю вместо этого прочитать Факты и заблуждения о первой нормальной форме , в частности, раздел «Неоднозначность повторяющихся групп».
Из вашего описания может показаться, что ваша таблица находится в 1NF (и, возможно, также в более высокой нормальной форме), потому что она является реляционной, поскольку эти термины могут применяться к Access, то есть к таблицам строк (без дубликатов) и столбцов (нетдубликаты имен), пересечение которых является скалярным значением и (строго говоря) не равно нулю.
Но, хотя ваша таблица установлена в 1NF (за исключением другой информации, которую вы не раскрыли), онаскорее всего, это будет страдать от других проблем дизайна.Короче говоря, пользователям может быть неудобно писать запросы, потому что в SQL единицей работы является строка, т. Е. Проще запрашивать, если шесть значений адресов находятся в строках, а не в столбцах.
Прежде чем что-то менять, я согласен с @Fink, что было бы полезно узнать намерение оригинального дизайнера.Одной из возможных причин выбранной конструкции является упрощение написания ограничений в кодере SQL DDL.Например, бизнес-правило состояло в том, что каждый объект должен иметь ровно шесть значений адресов, что практически невозможно реализовать любым другим способом, кроме шести столбцов NOT NULL
в одной строке (например, ограничение на уровне таблицы CHECK
заманчиво, но естьпроблема в Access в том, что она проверяет ограничения на уровне строк, а не на уровне операторов и не имеет механизма для отсрочки ограничения).