2014-11-14 3 views
0

, я работаю с базой данных третьей стороны, которая содержит контактную таблицуИмеет ли нижняя колонка нормальная форма?

т.е.

ID int, 
Name varchar(50) 
Name_Lower varchar(50) 

, как вы можете себе представить, Имя и Имя нижнего столбец содержит данные, такие как

Name - "John" 
Name_Lower - "john" 

поскольку данные должны быть точно такими же, за исключением нижней функции, я считаю, что это нарушает нормальную форму. Вероятно, стоит упомянуть об этом, это не вычисленная колонка. В прошлом были случаи, когда они не синхронизировались.

+1

Зачем вам такая колонка? На сравнения строк влияет сортировка столбцов. Нестандартная сортировка по умолчанию является невыполнением для большинства языков –

+0

@DrCopyPaste не нужно для этого, вы можете указать другую сортировку по самому запросу. Вычисленный столбец понадобится только в том случае, если вы хотите поместить индекс в новый столбец, но зачем это делать? –

+0

Простой: если он нарушает правило * Все данные должны полагаться на ключ, весь ключ и ничего, кроме ключа (так что помогите мне Codd) * - тогда да, это нарушает одну из трех основных нормальных форм. Если у вас есть столбец 'lower', который зависит ** только ** от столбца' Name', а 'Name' не является ключом для этой таблицы -> он нарушает NF –

ответ

1

Конечно, он разбивает NF, так как один столбец является прямым производным другого.

Вам не нужно это делать, BTW. Вы можете просто иметь таблицу as-is без столбца Lower, а затем создать VIEW, который включает вычисленный столбцовый столбец.

Всякий раз, когда вам нужна форма нижнего регистра, вы запрашиваете VIEW; но вы только обновляете ТАБЛИЦУ, и у вас никогда не будет проблем с синхронизацией.

+0

Я был рядом с ним, я просто хотел подтвердить, для ясности это сторонний БД, а не мой собственный – RoughPlace

Смежные вопросы