|
|
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
expla Неправильно понимаешь. Нормализация, это устранение аномалий обновления данных при МИНИМАЛЬНОМ числе отношений. А ты тут понахреначил... в 3 раза больше чем нужно. То чем ты занимаешься, это выделение атрибутов необязательных для заполнения в отдельные таблицы. Приём относящийся сугубо к реализации БД, который по необходимости применялся для экономии места к прямоугольным таблицам-файлам, в которых размер полей и записей фиксированный. В современных БД пустые поля почти (а иногда и совсем) не занимают места, и экономить тут нечего. sp даже контактные телефоны - это не одно и то же у них у всех, т.к. назначение у них в принципе разное: на предприятии это - секретарь, рабочий, факс, а для лица - домашний, ну и т.д. И как Вы себе представляете единую таблицу с аттрибутами и ФизЛица И ЮрЛица и ЧПФЛ? - или необходимо как в той пьесе - тут мы не читаем, тут мы рыбу заворачивали, а тут ваще ничего не надо!? ) А что тут представлять то. Просто таблица со всеми этими атрибутами. Так СУБД Оракл поступает, когда в одной таблице должны храниться разнотипные объекты. Да у Вас просто каща и в базе в голове тогда получицца!!!!!!!!! тогда для всей базы нужна одна таблица - и туда все напихать, а кто таблички тут рисует тот не правильно нормализацию понимает!!!!!!!!! :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 14:15:40 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
sp Да у Вас просто каща и в базе в голове тогда получицца!!!!!!!!! тогда для всей базы нужна одна таблица - и туда все напихать, а кто таблички тут рисует тот не правильно нормализацию понимает!!!!!!!!! :)) 1. С одной таблицей можно обойтись только в предельно простом случае. Если случай чуть сложнее, наверняка потребуется устранить аномалии обновления данных, вот тогда и придётся выполнять вертикальную декомпозицию отношений, с целью их нормализации. Короче, "не следует множить сущности без необходимости" (Occam). 2. Я не говорю, что хранение разнотипных объектов в одной таблице, это просто как 0. Иначе бы Оракл не стал делать объектную опцию для своей СУБД. Но это вполне нормальный приём, который применяет даже гигант индустрии Оракл. Во всяком случае в реляционной БД, заводить отдельную таблицу для объектов каждого типа и ещё одну таблицу для их общих атрибутов, унаследованных от базового типа, сложнее, чем рулить одной таблицей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 14:34:00 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
[quot expla2. Я не говорю, что хранение разнотипных объектов в одной таблице, это просто как 0. Иначе бы Оракл не стал делать объектную опцию для своей СУБД. Но это вполне нормальный приём, который применяет даже гигант индустрии Оракл. Во всяком случае в реляционной БД, заводить отдельную таблицу для объектов каждого типа и ещё одну таблицу для их общих атрибутов, унаследованных от базового типа, сложнее, чем рулить одной таблицей.[/quot] Вы можете без теоретических выкладок на данном простом примере проиллюстрировать Вашу мысль? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 14:35:54 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
авторЯ не говорю, что хранение разнотипных объектов в одной таблице, это просто как 0. Иначе бы Оракл не стал делать объектную опцию для своей СУБД. Но это вполне нормальный приём, который применяет даже гигант индустрии Оракл. Да, шуму было много, но и только. автор Во всяком случае в реляционной БД, заводить отдельную таблицу для объектов каждого типа и ещё одну таблицу для их общих атрибутов, унаследованных от базового типа, сложнее, чем рулить одной таблицей. Весьма спорное утверждение.Здесь читаем, здесь не читаем, а здесь я рыбу заворачивал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 14:48:50 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
spВы можете без теоретических выкладок на данном простом примере проиллюстрировать Вашу мысль? Имеем базовый тип "Лицо" и два его подтипа Физ_Лицо и Юр_Лицо. Код: plaintext 1. 2. 3. 4. Типы Физ_Лицо и Юр_Лицо наследуют атрибуты типа Лицо и добавляют свои специализированные атрибуты. В ORСУБД можем создать таблицу для хранения всех подтипов Лицо: Код: plaintext В реляционной СУБД можем создать таблицу для хранения всех подтипов Лицо: Код: plaintext 1. 2. 3. 4. 5. 6. Но можно и так. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ИМХО, Obj_ЛИЦА и ВСЕ_Лица проще в управлении. Для изменения данных достаточно одного SQL запроса, для выборки не нужен join, тогда как с триадой Лица,Физ_Лица,ЮР_Лица нужно как минимум два SQL запроса и часто будет нужен join. На счёт рыбы, так это вопрос стандартов именования и документирования полей. Сделайте имена полей "говорящими", и никаких проблем не будет. После того как приложения БД разработаны, имена полей уже никого не будут интересовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 15:40:21 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
expla Но можно и так. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. но ведь и при такой реализации (которую я и использовал, но не до конца) просле того как приложение запущено уже неважно что там больше joinov ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 15:56:37 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
explaВо всяком случае в реляционной БД, заводить отдельную таблицу для объектов каждого типа и ещё одну таблицу для их общих атрибутов, унаследованных от базового типа, сложнее, чем рулить одной таблицей. Вот уж действительно, не следует умножать сущностей без необходимости. У Контрагента есть Представитель. У Контрагента есть Банковские реквизиты (не у Представителя - потому что у него их может быть много). Лучше бы этого Контрагента назвать Стороной по договору. Представитель относится к определенному типу, у каждого типа свои атрибуты. Примерно так. Ничего никуда наследовать не надо, потом один геморрой. Это все ИМХО, а все желающие могут понаступать на грабли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 16:14:20 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
expla Но можно и так. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. По ситуации. Я бы <атрибуты типа Лицо> лучше выкинул. Да Вы сами подумайте, какие там атрибуты могут быть :) ИНН и т.п.? Лучше в раздельных таблицах это держать, чем в атрибутах Лица. В крайнем случае создать еще таблицу Налогоплательщик и внести туда :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 16:18:42 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
Если только интересуют физики и юрики, сделать четные и нечетные ID без всяких лиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 16:41:59 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
spно ведь и при такой реализации (которую я и использовал, но не до конца) просле того как приложение запущено уже неважно что там больше joinov Лишие join'ы сильно влияют на производительность системы. Но выбор реализации конструкции наследования типов выходит за рамки данного форума. Нужно смотреть на конкретную СУБД и другие технические показатели, как то объём данных, методы доступа к таблицам, требования к производительности и д.р.. Ведь можно забить на ссылочную целостность и сделать так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. где ID заполнять из общего счётчика. И т.д. и т.п. На самом деле ссылка из Договора на Лицо не есть лучшее решение. По сути, эта ссылка вычисляемая, если непосредственно в Договоре указаны реквизиты сторон. Если ограничиться только ссылками, такое вычисление должен будет выполнять оператор, который заводит договор. Если в договор включить реквизиты сторон, то такое вычисление может сделать машина и сохранить результат для дальнейшего использования. При изменении даных Лица, машина сможет проконтролировать и пересчитать ссылки, сообщить о том, что в договор нужно внести изменения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 16:46:18 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
SeVa2 Marmelad, советы в стиле Селко хороши только в теории.SSN не может быть первичным ключем, он не уникален????? . Нормализация нужна в разумных пределах.(!) Сводить все одну таблицу в данном случае я бы не стал Абсолютно согласен с Вами Коллега по теме Нормализация. Всегда нужна разумная середина. Не соглашусь по теме SSN - по условию этот номер уникален. Если бы можно было себе представить себе такую "неуникальность". Нет - как Вы себе представляете уплату налогов на один и тот же номер двумя разными лицами... Я бы конечно не возражал если бы такое было возможно. Первым бы стоЯл в очереди за "развенчание" такого случая. Но... Налоговая инспекция Соединённых Штатов имеет пожалуй один из наилучших IT в мире. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 16:47:43 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
Mr MarmeladНе соглашусь по теме SSN - по условию этот номер уникален. Использование внешних идентификаторов внутри системы не есть хорошая идея. Я не сомневаюсь в уникальности SSN внутри системы налоговой службы США, однако вне этой системы значение SSN может быть временно неизвестно (чувак забыл карточку дома), не определено для конкретного лица (например, он россиянин и не стоит на учёте в налоговой службе США), когда-то во время ввода данных совсем другого человека оператор ошибся и теперь система орёт, что вновь вводимый SSN принадлежит другому лицу, и т.д. Практически, для задач идентификации внешних объектов должны использоваться несколько атрибутов в разных комбинациях, любой из которых может быть неизвестен или содержать ошибки. Например для ФИз лица, это могут быть паспортные данные, включая места регистрации, анкетные данные, данные водительского удостверения, биометрические даные и т.д. Для банков очень важно идентифицировать клиентов как можно точнее, для розничного магазина данные клиента вообще не интересны, если он платит кэшем, если картой, то могут проверить паспорт, подпись, попросить ввести PIN. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 17:08:04 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
spну я такое видел в 1С - там пишецца Наименование, а подним понимаецца и название Предприятия и Название ЧП и ФИО !)) Правильно я понял Вашу мысль? Ну если уж глубоко капать по НОРМАЛИЗАЦИИ то - сначала я бы сделал (здесь уже предлагалось) Сущность "Объект Хоз Деятельности" Там бы определил все Деловые аттрибуты - "Наименование" ( может быть нормализовано глубже - 1-N у предприятия могут быть много имён) "Вид Предприятия" "Руководители" - отношения к "Персональным" .... Потом бы сделал "В Лице" - Персональную сущность. К Персональной сущности отнёс бы "Пол" "Год Рождения" "Семейное Положение" "Имя" (может быть нормализовано даже 1-N потому как у меня может быть много имён а сущность одна) .....- все "Анкетные" Данные. Те аттрибуты которые не могут относиться к "Хоз Деятельности". Потом одел бы "Банковскую Сущность" - и отношения ее к "Хоз Деятелям" и к "Персональной Сущности" То же сделал бы с "Адресом Всуе" - и отношение N-M к "Хоз Деятелем" и "Персоналом" В Адресе самом куча своих подадресов - и телефонов... Вот ЭТО была бы НОРМАЛИЗАЦИЯ в стиле 1С - я никогда не видел эту ПО но понимаю ее логику как логику ВЕРТИКАЛИ - OLTP системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 17:10:39 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
expla Использование внешних идентификаторов внутри системы не есть хорошая идея. Не просто плохая идея а запрещённая законом. Реализация ее идёт на уровне генерации уникальной системной идентификации к которой (можно сразу а можно и в последствии) подцепить этот самый SSN. Наличие его в системе не афишируется но так или иначе оно всегда есть. Проверяется и перепроверяется десятки раз. Особенно в системах страхования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 17:17:23 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
авторАбсолютно согласен с Вами Коллега по теме Нормализация. Всегда нужна разумная середина. Не соглашусь по теме SSN - по условию этот номер уникален. Если бы можно было себе представить себе такую "неуникальность". Нет - как Вы себе представляете уплату налогов на один и тот же номер двумя разными лицами... Я бы конечно не возражал если бы такое было возможно. Первым бы стоЯл в очереди за "развенчание" такого случая. Но... Налоговая инспекция Соединённых Штатов имеет пожалуй один из наилучших IT в мире. К сожалению, коллега,и в одном из лучших IT не все так гладко.У меня тоже было желание сделать SSN PK, но когда были проанализированны данные(порядка 700 000 записей лет за70-80) в реальной базе, такое желание пропало.Выяснилось, что есть дубликаты и у одного человека может быть несколько номеров.Думал, что это связано с ошибками ввода,но получил четкий ответ: это реальные ситуации и на старуху бывает проруха. Затем и в требованиях было четко прописано, что SSN НЕ МОЖЕТ ЯВЛЯТЬСЯ УНИКАЛЬНЫМ ПРИЗНАКОМ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 17:17:59 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
SeVaК сожалению, коллега,и в одном из лучших IT не все так гладко. ...Выяснилось, что есть дубликаты и у одного человека может быть несколько номеров. Совершенно верно. И Именно так - У ОДНОГО человека может быть несколько SSN Но не наоборот. Не можт быть одного номера у двух людей. Любой случай дубликата - а система разработана в 30-х годах когда записи велись вручную - рассматривается особенно. На уровне Совета Старейшин. Начиная с 2002 года SSN вообще ДОЛЖЕН быть вынесен в отдельный (недоступный) аттрибут да ещё и за пределы системы. Мы его не используем обычно. Использование его необходимо - в Медицине, Банковских (Финансовых), Страховых и Государственных системах. Там оно черезвычайно регламентировано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 17:29:49 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
Система была не только страховая и финансовая,как и дубликаты не только в 30годах,но и гораздо позже.Гладко бывает только в букварях у Селко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 17:49:42 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
SeVaГладко бывает только в букварях у Селко. Дааа уж... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 17:54:18 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
Dogenexpla Но можно и так. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. По ситуации. Я бы <атрибуты типа Лицо> лучше выкинул. Да Вы сами подумайте, какие там атрибуты могут быть :) ИНН и т.п.? Лучше в раздельных таблицах это держать, чем в атрибутах Лица. В крайнем случае создать еще таблицу Налогоплательщик и внести туда :) а в догов в поле ДругаяСторона что вы вставлять будете??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 17:56:17 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
автора в догов в поле ДругаяСторона что вы вставлять будете??? ID, что еще.Созаем view или процедуру SELECT ID, NULL ParentID, FullName,PartyType FROM Физ UNION ALL SELECT ID, ParentID, FullName,PartyType FROM Юр и используем ее в клиенте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 18:10:41 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
ID должен быть уникальный в пределах БД.Добиться этого можно разными способами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 18:12:48 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
explaspно ведь и при такой реализации (которую я и использовал, но не до конца) просле того как приложение запущено уже неважно что там больше joinov Лишие join'ы сильно влияют на производительность системы. Но выбор реализации конструкции наследования типов выходит за рамки данного форума. Нужно смотреть на конкретную СУБД и другие технические показатели, как то объём данных, методы доступа к таблицам, требования к производительности и д.р.. Ведь можно забить на ссылочную целостность и сделать так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. где ID заполнять из общего счётчика. И т.д. и т.п. На самом деле ссылка из Договора на Лицо не есть лучшее решение. По сути, эта ссылка вычисляемая, если непосредственно в Договоре указаны реквизиты сторон. Если ограничиться только ссылками, такое вычисление должен будет выполнять оператор, который заводит договор. Если в договор включить реквизиты сторон, то такое вычисление может сделать машина и сохранить результат для дальнейшего использования. При изменении даных Лица, машина сможет проконтролировать и пересчитать ссылки, сообщить о том, что в договор нужно внести изменения. А вот эта идея мне кажется стоящей для рассмотрения, на первый взгляд она может решить все проблемы, но необходимо посмотреть внимательней ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 18:12:49 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
sp пишет: > но в таком случае все ихние множественные аттрибуты получаетца тоже надо > делать через наследование?? Что значить ? Нет, они просто будут у главного предка, т.е. и у всех его наследников тоже, и с одинаковым механизмом работы с ними. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 19:05:37 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
sp пишет: > ну как же там не идет - там обсуждается единый ObjectID А обычное наследование , без EAV, вы не приемлите ? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 19:06:59 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35703559&tid=1543490]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
174ms |
get topic data: |
9ms |
get forum data: |
4ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
| others: | 231ms |
| total: | 524ms |

| 0 / 0 |
