|
|
|
Нужна-ли тут нормализация
|
|||
|---|---|---|---|
|
#18+
Имеется таблица клиентов: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Нарушена 3-я нормальная форма, вопрос такой - какие именно аномалии мы уберем, если вынесем подобные сущности в другие таблицы? Ведь по-сути тут связь один к одному. Проблемы типа ошибок в названии города не важны, т.к. каталога городов, названий улиц и т.п. нет (есть только каталог существуюших типов улиц и тип улицы на него и ссылается) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 04:52 |
|
||
|
Нужна-ли тут нормализация
|
|||
|---|---|---|---|
|
#18+
stenford Нужна-ли тут нормализация А самому не хочется засунуть все адресные причиндалы в таблицу адресов. заменив кучу полей двумя Current_address_id и previous_address_id ссылающимися на таблицу адресов stenford какие именно аномалии мы уберем, если вынесем подобные сущности в другие таблицыИзменяя адрес (например корректируя номер дома) мы автоматически изменяем его у всех клиентах ссылающихся на него. stenford каталога городов, названий улиц и т.п. нет А почему? Пусть не всеобъемлющий, пусть только для адресов в базе, пусть хотя бы для заполнения выпадающих списков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 06:39 |
|
||
|
Нужна-ли тут нормализация
|
|||
|---|---|---|---|
|
#18+
а у мня вот так: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 07:48 |
|
||
|
Нужна-ли тут нормализация
|
|||
|---|---|---|---|
|
#18+
SERG1257А самому не хочется засунуть все адресные причиндалы в таблицу адресов. заменив кучу полей двумя Current_address_id и previous_address_id ссылающимися на таблицу адресов. "хочется" не аргумент, мне не себя надо убеждать, а других для изменения существующей схемы SERG1257Изменяя адрес (например корректируя номер дома) мы автоматически изменяем его у всех клиентах ссылающихся на него. эта функциональность отсутствует, для изменения адреса каждого клиента будет открыто отдельное окно и корректироваться будет отдельно. SERG1257 А почему? Пусть не всеобъемлющий, пусть только для адресов в базе, пусть хотя бы для заполнения выпадающих списков. для заполнения выпадающих списков это ненужно, можно просто собрать их запросом типа select distinct Current_Address_City from dbo.Client ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 08:13 |
|
||
|
Нужна-ли тут нормализация
|
|||
|---|---|---|---|
|
#18+
stenford"хочется" не аргумент, мне не себя надо убеждать, а других для изменения существующей схемы Если изменение схемы не очевидно - зачем тогда "копья ломать"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 09:26 |
|
||
|
Нужна-ли тут нормализация
|
|||
|---|---|---|---|
|
#18+
stenfordНарушена 3-я нормальная формаРаз вы утверждаетет, что 3НФ нарушена, то значит знаете и то какие тут аномалии. Сторонний же человек, не зная вашей постановки задачи, не сможет сказать ничего конкретного. Я, например, не вижу, что у вас однозначно есть функциональные зависимости атрибутов. Например, вполне допускаю такую постановку задачи, где поле state от поля city не зависит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 13:01 |
|
||
|
Нужна-ли тут нормализация
|
|||
|---|---|---|---|
|
#18+
> какие именно аномалии мы уберем, если вынесем подобные сущности в другие таблицы? Зависит от того, что и как вы собираетесь выносить. > Ведь по-сути тут связь один к одному. Никогда и не было такой связи применительно к адресам. > Проблемы типа ошибок в названии города не важны Вы точно занимаетесь проектированием баз данных? Разместите объяву в разделе "Работа", полагаю, за небольшие деньги найдете студентов, которые приведут описанное непотребство к разумному виду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 13:29 |
|
||
|
Нужна-ли тут нормализация
|
|||
|---|---|---|---|
|
#18+
stenford эта функциональность отсутствует, для изменения адреса каждого клиента будет открыто отдельное окно и корректироваться будет отдельноТо есть если почтовый индекс был введен неправильно тогда оператор должен вручную перебить все адреса и все предыдущие адреса. Если это приемлимо, тогда какой дальше разговор. Размер базы наверное тоже несущественный (на нормализации много не выгадаете) stenford можно просто собрать их запросом типа select distinct Current_Address_City from dbo.ClientДля ваших идеальных данных (которые не надо править) и небольших (скан таблицы всех клиентов - фигня) это может быть приемлимо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 17:00 |
|
||
|
Нужна-ли тут нормализация
|
|||
|---|---|---|---|
|
#18+
SERG1257То есть если почтовый индекс был введен неправильно тогда оператор должен вручную перебить все адреса и все предыдущие адреса.Если учесть, что у каждого клиента в индексе собственные ошибки (так как каждому клиенту он вбивался независимо), то слово "вручную" уже не так страшно. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 17:41 |
|
||
|
Нужна-ли тут нормализация
|
|||
|---|---|---|---|
|
#18+
Думаю стоит сделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2010, 15:29 |
|
||
|
Нужна-ли тут нормализация
|
|||
|---|---|---|---|
|
#18+
stenford Нарушена 3-я нормальная форма, вопрос такой - какие именно аномалии мы уберем, если вынесем подобные сущности в другие таблицы? Ведь по-сути тут связь один к одному. В реальной предметной области, которую пытается отобразить БД, связь тут все-таки "один ко многим" (у многих клиентов город текущего адреса один и тот же). ИМХО имеет смысл не только вынести в отдельные сущности улицы, города, штаты (области) и т.п. и потратиться на формирование справочников хотя бы из существующих данных, но и выделить адреса вообще в отдельную таблицу, оформив все примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2010, 23:50 |
|
||
|
Нужна-ли тут нормализация
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyРаз вы утверждаетет, что 3НФ нарушена, то значит знаете и то какие тут аномалии. Сторонний же человек, не зная вашей постановки задачи, не сможет сказать ничего конкретного. Я, например, не вижу, что у вас однозначно есть функциональные зависимости атрибутов. Например, вполне допускаю такую постановку задачи, где поле state от поля city не зависит. если-бы знал, то не стал-бы открывать топик. Повторюсь, связь адресов и клиентов - один к одному, никаких валидаций ошибок в названиях и почтовых индексов нет, одной из причин этого является то, что 90% новых данных поступает из внешней системы, если в названии города ошибка, то запись все равно идет в систему. Вообще, может можно сказать, что тут нет нарушения третьей формы? Т.е. скажем аттрибут Город или Улица в такой постановке напрямую зависит от клиента? Область банковская Хотя одну аномалию я кажется нашел, скажем если в адресе есть not null столбцы, то в случае одной таблицы они все равно должны быть обьявлены как null (т.е. потребуется как минимум добавлять check constraint) и соответственно возможна ситуация когда обязательное поле будет отсутствовать SERG1257 То есть если почтовый индекс был введен неправильно тогда оператор должен вручную перебить все адреса и все предыдущие адреса Для ваших идеальных данных (которые не надо править) и небольших (скан таблицы всех клиентов - фигня) это может быть приемлимо. ну нет валидации и все, требования такие, как они там будут перебивать неправильные данные - вручную или как еще мы не знаем. Сканы таблиц и прочее - это из другой области, вопрос был именно про логические аномалии, какие могут возникнуть проблемы с производительностью я представляю (скажем помимо сканов, при каждом обращении к таблице эти столбцы будут затягиваться в память даже если они не нужны в запросе, соответственно значительно увеличивая количество логических чтений) JohnSparrow оформив все примерно так: как нормализовать схему я знаю. Вопрос про то, какие именно логические аномалии имеются в текущей схеме ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2010, 04:16 |
|
||
|
Нужна-ли тут нормализация
|
|||
|---|---|---|---|
|
#18+
stenfordВообще, может можно сказать, что тут нет нарушения третьей формы? Т.е. скажем аттрибут Город или Улица в такой постановке напрямую зависит от клиента?Я же говорю, что все зависит от бизнес-требований. По вашим словам похоже на то, что зависимостей одних атрибутов от других нет. Понятно, что это несколько не стыкуется со здравым смыслом (по крайней мере с общепринятыми представлениями о том, что такое адрес), но во главе угла стоит не здравый смысл, а постановка задачи. stenfordХотя одну аномалию я кажется нашел, скажем если в адресе есть not null столбцы, А они есть? Не зная требований опять же трудно судить. Скажем, может ли у клиента быть улица при отсутствующем городе? В любом случае вынесение адреса в отдельную таблицу выглядит разумным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2010, 11:18 |
|
||
|
Нужна-ли тут нормализация
|
|||
|---|---|---|---|
|
#18+
Дайте гляну в хрустальный шар. У вас есть некая система которая лично stenford режет глаз и вы ищете аргументы за перепроектирование. В то же время 1 Вероятность совпадения адресов (текущих или предыдущих) у клиентов (говорить про один-к-одному я бы не стал) небольшая 2 Обработка адресов в вашем приложении минимальна - они извне приходят и используются у вас только для печати (вы не шлете писем по адресам, не гоняете курьеров) 3 Производительность, размер базы и т.п. малозначащий факт по сравнению с необходимостью что-то менять 4 В случае форс-мажора типа переименование Ленинграда в Петербург или улицы - дополнительные усилия оператора или программиста - несущественны. Если все предположения верны, то единственный ваш козырь - производительность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2010, 19:40 |
|
||
|
Нужна-ли тут нормализация
|
|||
|---|---|---|---|
|
#18+
интересно, если вдруг попросят хранить пре-превиос адрес, заведем еще 53 новых поля?) как минимум сократить таблицу до current полей приставку current убрать как только клиент меняет адрес - новая запись добавить флаг с типом дата: с какого момента адрес стал актуальным, в котору и заносить дату смены адреса... все кто ранее по дате и будут ваши превиос. ну как то так... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2010, 02:21 |
|
||
|
Нужна-ли тут нормализация
|
|||
|---|---|---|---|
|
#18+
stenford, стремление к 3нф - это конечно благое дело...но пожалейте людей..при смене адреса они меняют старый адрес на текущий текущий на новый..это же безумие? даже если вы это автоматизировали- это само по себе безумие) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2010, 02:27 |
|
||
|
Нужна-ли тут нормализация
|
|||
|---|---|---|---|
|
#18+
не захотят они 2 предыдущих адреса, это банковская система и подобные требования устоялись годами. И потом отслеживать адреса в реальном времени никто не собирается, это по сути система подачи заявок на кредит - при подаче заявки от клиента просят 2 адреса и все. Если он подает заявку еще раз - сбор информации идет по новой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2010, 02:59 |
|
||
|
Нужна-ли тут нормализация
|
|||
|---|---|---|---|
|
#18+
stenford, так это не таблица клиентов, а таблица заявок. А в заявке все атрибуты зависят только от Client_ID (ID заявки?), потому как клиент вприципе может писать в заявку всё что захочет и никаких ФЗ между неключевыми атрибутами предполагать не приходится. Повторное использование наборов Address_% не является каким либо нарушением. Объяви доменный тип ADDRESS и получишь таблицу: ADDRESS is object ( UnitNo HouseNo StreetName StreetTypeID City State Postcode ); Client_ID Name Surname Current_Address ADDRESS, Previous_Address ADDRESS . Т.е. Current_Address и Previous_Address просто два разных атрибута записи, только в старых СУБД их приходится разваливать на компоненты. Можно так же заметить, что таблица table addr of ADDRESS будет состоять только из ключевых атрибутов, так что смысла в ней чуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 20:18 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36830680&tid=1542532]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
168ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 505ms |

| 0 / 0 |
