powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Донормализовывался - караул!!! )
25 сообщений из 111, страница 2 из 5
Донормализовывался - караул!!! )
    #35702679
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
expla
Неправильно понимаешь. Нормализация, это устранение аномалий обновления данных при МИНИМАЛЬНОМ числе отношений. А ты тут понахреначил... в 3 раза больше чем нужно.

То чем ты занимаешься, это выделение атрибутов необязательных для заполнения в отдельные таблицы. Приём относящийся сугубо к реализации БД, который по необходимости применялся для экономии места к прямоугольным таблицам-файлам, в которых размер полей и записей фиксированный. В современных БД пустые поля почти (а иногда и совсем) не занимают места, и экономить тут нечего.

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

И как Вы себе представляете единую таблицу с аттрибутами и ФизЛица И ЮрЛица и ЧПФЛ? - или необходимо как в той пьесе - тут мы не читаем, тут мы рыбу заворачивали, а тут ваще ничего не надо!? )

А что тут представлять то. Просто таблица со всеми этими атрибутами. Так СУБД Оракл поступает, когда в одной таблице должны храниться разнотипные объекты.

Да у Вас просто каща и в базе в голове тогда получицца!!!!!!!!!
тогда для всей базы нужна одна таблица - и туда все напихать, а кто таблички тут рисует тот не правильно нормализацию понимает!!!!!!!!! :))
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35702761
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sp
Да у Вас просто каща и в базе в голове тогда получицца!!!!!!!!!
тогда для всей базы нужна одна таблица - и туда все напихать, а кто таблички тут рисует тот не правильно нормализацию понимает!!!!!!!!! :))

1. С одной таблицей можно обойтись только в предельно простом случае. Если случай чуть сложнее, наверняка потребуется устранить аномалии обновления данных, вот тогда и придётся выполнять вертикальную декомпозицию отношений, с целью их нормализации.
Короче, "не следует множить сущности без необходимости" (Occam).

2. Я не говорю, что хранение разнотипных объектов в одной таблице, это просто как 0. Иначе бы Оракл не стал делать объектную опцию для своей СУБД. Но это вполне нормальный приём, который применяет даже гигант индустрии Оракл. Во всяком случае в реляционной БД, заводить отдельную таблицу для объектов каждого типа и ещё одну таблицу для их общих атрибутов, унаследованных от базового типа, сложнее, чем рулить одной таблицей.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35702768
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot expla2. Я не говорю, что хранение разнотипных объектов в одной таблице, это просто как 0. Иначе бы Оракл не стал делать объектную опцию для своей СУБД. Но это вполне нормальный приём, который применяет даже гигант индустрии Оракл. Во всяком случае в реляционной БД, заводить отдельную таблицу для объектов каждого типа и ещё одну таблицу для их общих атрибутов, унаследованных от базового типа, сложнее, чем рулить одной таблицей.[/quot]

Вы можете без теоретических выкладок на данном простом примере проиллюстрировать Вашу мысль?
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35702815
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЯ не говорю, что хранение разнотипных объектов в одной таблице, это просто как 0. Иначе бы Оракл не стал делать объектную опцию для своей СУБД. Но это вполне нормальный приём, который применяет даже гигант индустрии Оракл.
Да, шуму было много, но и только.
автор Во всяком случае в реляционной БД, заводить отдельную таблицу для объектов каждого типа и ещё одну таблицу для их общих атрибутов, унаследованных от базового типа, сложнее, чем рулить одной таблицей.
Весьма спорное утверждение.Здесь читаем, здесь не читаем, а здесь я рыбу заворачивал.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35703050
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
spВы можете без теоретических выкладок на данном простом примере проиллюстрировать Вашу мысль?

Имеем базовый тип "Лицо" и два его подтипа Физ_Лицо и Юр_Лицо.

Код: plaintext
1.
2.
3.
4.
type Лицо ...;

type Физ_Лицо subtype Лицо ...;

type Юр_Лицо subtype Лицо ...;

Типы Физ_Лицо и Юр_Лицо наследуют атрибуты типа Лицо и добавляют свои специализированные атрибуты.

В ORСУБД можем создать таблицу для хранения всех подтипов Лицо:

Код: plaintext
table Obj_Лица of Лицо;

В реляционной СУБД можем создать таблицу для хранения всех подтипов Лицо:

Код: plaintext
1.
2.
3.
4.
5.
6.
table ВСЕ_Лица (
   ID,
   <атрибуты типа Лицо>,
   дискриминатор, -- определяет специализацию - Физ_Лицо/Юр_Лицо
   <атрибуты типа Физ_Лицо>,
   <атрибуты типа Юр_Лицо>
);

Но можно и так.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
table Лица (
   ID,
   <атрибуты типа Лицо>
)

table Физ_Лица (
   <атрибуты типа Физ_Лицо>,
   ID references Лица
);

table ЮР_Лица (
   <атрибуты типа ЮР_Лицо>,
   ID references Лица
);

ИМХО, Obj_ЛИЦА и ВСЕ_Лица проще в управлении. Для изменения данных достаточно одного SQL запроса, для выборки не нужен join, тогда как с триадой Лица,Физ_Лица,ЮР_Лица нужно как минимум два SQL запроса и часто будет нужен join.

На счёт рыбы, так это вопрос стандартов именования и документирования полей. Сделайте имена полей "говорящими", и никаких проблем не будет. После того как приложения БД разработаны, имена полей уже никого не будут интересовать.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35703139
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
expla
Но можно и так.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
table Лица (
   ID,
   <атрибуты типа Лицо>
)

table Физ_Лица (
   <атрибуты типа Физ_Лицо>,
   ID references Лица
);

table ЮР_Лица (
   <атрибуты типа ЮР_Лицо>,
   ID references Лица
);



но ведь и при такой реализации (которую я и использовал, но не до конца) просле того как приложение запущено уже неважно что там больше joinov
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35703213
Фотография Dogen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
explaВо всяком случае в реляционной БД, заводить отдельную таблицу для объектов каждого типа и ещё одну таблицу для их общих атрибутов, унаследованных от базового типа, сложнее, чем рулить одной таблицей.
Вот уж действительно, не следует умножать сущностей без необходимости.

У Контрагента есть Представитель.
У Контрагента есть Банковские реквизиты (не у Представителя - потому что у него их может быть много).

Лучше бы этого Контрагента назвать Стороной по договору.

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

Примерно так.

Ничего никуда наследовать не надо, потом один геморрой.

Это все ИМХО, а все желающие могут понаступать на грабли.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35703232
Фотография Dogen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
expla
Но можно и так.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
table Лица (
   ID,
   <атрибуты типа Лицо>
)

table Физ_Лица (
   <атрибуты типа Физ_Лицо>,
   ID references Лица
);

table ЮР_Лица (
   <атрибуты типа ЮР_Лицо>,
   ID references Лица
);

По ситуации. Я бы <атрибуты типа Лицо> лучше выкинул. Да Вы сами подумайте, какие там атрибуты могут быть :) ИНН и т.п.? Лучше в раздельных таблицах это держать, чем в атрибутах Лица. В крайнем случае создать еще таблицу Налогоплательщик и внести туда :)
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35703323
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если только интересуют физики и юрики, сделать четные и нечетные ID без всяких лиц
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35703345
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
spно ведь и при такой реализации (которую я и использовал, но не до конца) просле того как приложение запущено уже неважно что там больше joinov

Лишие join'ы сильно влияют на производительность системы. Но выбор реализации конструкции наследования типов выходит за рамки данного форума. Нужно смотреть на конкретную СУБД и другие технические показатели, как то объём данных, методы доступа к таблицам, требования к производительности и д.р..

Ведь можно забить на ссылочную целостность и сделать так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
table Физ_Лица (
   <атрибуты типа Лицо>,
   <атрибуты типа Физ_Лицо>,
   ID
);

table ЮР_Лица (
   <атрибуты типа Лицо>,
   <атрибуты типа ЮР_Лицо>,
   ID
);

table Договор (
   <прочие атрибуты>
   заказчик, -- тут был references Лица, пока мы не удалили таблицу Лица
   исполнитель, -- тут был references Лица, пока мы не удалили таблицу Лица
   представитель_заказчика, -- тут был references Лица, пока мы не удалили таблицу Лица
);

где ID заполнять из общего счётчика. И т.д. и т.п. На самом деле ссылка из Договора на Лицо не есть лучшее решение. По сути, эта ссылка вычисляемая, если непосредственно в Договоре указаны реквизиты сторон. Если ограничиться только ссылками, такое вычисление должен будет выполнять оператор, который заводит договор. Если в договор включить реквизиты сторон, то такое вычисление может сделать машина и сохранить результат для дальнейшего использования. При изменении даных Лица, машина сможет проконтролировать и пересчитать ссылки, сообщить о том, что в договор нужно внести изменения.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35703353
Фотография Mr Marmelad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa2 Marmelad, советы в стиле Селко хороши только в теории.SSN не может быть первичным ключем, он не уникален????? .
Нормализация нужна в разумных пределах.(!) Сводить все одну таблицу в данном случае я бы не стал
Абсолютно согласен с Вами Коллега по теме Нормализация. Всегда нужна разумная середина. Не соглашусь по теме SSN - по условию этот номер уникален. Если бы можно было себе представить себе такую "неуникальность". Нет - как Вы себе представляете уплату налогов на один и тот же номер двумя разными лицами... Я бы конечно не возражал если бы такое было возможно. Первым бы стоЯл в очереди за "развенчание" такого случая. Но... Налоговая инспекция Соединённых Штатов имеет пожалуй один из наилучших IT в мире.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35703413
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mr MarmeladНе соглашусь по теме SSN - по условию этот номер уникален.

Использование внешних идентификаторов внутри системы не есть хорошая идея. Я не сомневаюсь в уникальности SSN внутри системы налоговой службы США, однако вне этой системы значение SSN может быть временно неизвестно (чувак забыл карточку дома), не определено для конкретного лица (например, он россиянин и не стоит на учёте в налоговой службе США), когда-то во время ввода данных совсем другого человека оператор ошибся и теперь система орёт, что вновь вводимый SSN принадлежит другому лицу, и т.д.

Практически, для задач идентификации внешних объектов должны использоваться несколько атрибутов в разных комбинациях, любой из которых может быть неизвестен или содержать ошибки. Например для ФИз лица, это могут быть паспортные данные, включая места регистрации, анкетные данные, данные водительского удостверения, биометрические даные и т.д. Для банков очень важно идентифицировать клиентов как можно точнее, для розничного магазина данные клиента вообще не интересны, если он платит кэшем, если картой, то могут проверить паспорт, подпись, попросить ввести PIN.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35703424
Фотография Mr Marmelad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spну я такое видел в 1С - там пишецца Наименование, а подним понимаецца и название Предприятия и Название ЧП и ФИО !))

Правильно я понял Вашу мысль?

Ну если уж глубоко капать по НОРМАЛИЗАЦИИ то - сначала я бы сделал (здесь уже предлагалось) Сущность "Объект Хоз Деятельности" Там бы определил все Деловые аттрибуты - "Наименование" ( может быть нормализовано глубже - 1-N у предприятия могут быть много имён) "Вид Предприятия" "Руководители" - отношения к "Персональным" .... Потом бы сделал "В Лице" - Персональную сущность. К Персональной сущности отнёс бы "Пол" "Год Рождения" "Семейное Положение" "Имя" (может быть нормализовано даже 1-N потому как у меня может быть много имён а сущность одна) .....- все "Анкетные" Данные. Те аттрибуты которые не могут относиться к "Хоз Деятельности". Потом одел бы "Банковскую Сущность" - и отношения ее к "Хоз Деятелям" и к "Персональной Сущности" То же сделал бы с "Адресом Всуе" - и отношение N-M к "Хоз Деятелем" и "Персоналом" В Адресе самом куча своих подадресов - и телефонов... Вот ЭТО была бы НОРМАЛИЗАЦИЯ в стиле 1С - я никогда не видел эту ПО но понимаю ее логику как логику ВЕРТИКАЛИ - OLTP системы.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35703454
Фотография Mr Marmelad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
expla
Использование внешних идентификаторов внутри системы не есть хорошая идея.

Не просто плохая идея а запрещённая законом. Реализация ее идёт на уровне генерации уникальной системной идентификации к которой (можно сразу а можно и в последствии) подцепить этот самый SSN. Наличие его в системе не афишируется но так или иначе оно всегда есть. Проверяется и перепроверяется десятки раз. Особенно в системах страхования.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35703457
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторАбсолютно согласен с Вами Коллега по теме Нормализация. Всегда нужна разумная середина. Не соглашусь по теме SSN - по условию этот номер уникален. Если бы можно было себе представить себе такую "неуникальность". Нет - как Вы себе представляете уплату налогов на один и тот же номер двумя разными лицами... Я бы конечно не возражал если бы такое было возможно. Первым бы стоЯл в очереди за "развенчание" такого случая. Но... Налоговая инспекция Соединённых Штатов имеет пожалуй один из наилучших IT в мире.
К сожалению, коллега,и в одном из лучших IT не все так гладко.У меня тоже было желание сделать SSN PK, но когда были проанализированны данные(порядка 700 000 записей лет за70-80) в реальной базе, такое желание пропало.Выяснилось, что есть дубликаты и у одного человека может быть несколько номеров.Думал, что это связано с ошибками ввода,но получил четкий ответ: это реальные ситуации и на старуху бывает проруха.
Затем и в требованиях было четко прописано, что SSN НЕ МОЖЕТ ЯВЛЯТЬСЯ УНИКАЛЬНЫМ ПРИЗНАКОМ.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35703489
Фотография Mr Marmelad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaК сожалению, коллега,и в одном из лучших IT не все так гладко.
...Выяснилось, что есть дубликаты и у одного человека может быть несколько номеров.

Совершенно верно. И Именно так - У ОДНОГО человека может быть несколько SSN Но не наоборот. Не можт быть одного номера у двух людей. Любой случай дубликата - а система разработана в 30-х годах когда записи велись вручную - рассматривается особенно. На уровне Совета Старейшин. Начиная с 2002 года SSN вообще ДОЛЖЕН быть вынесен в отдельный (недоступный) аттрибут да ещё и за пределы системы. Мы его не используем обычно. Использование его необходимо - в Медицине, Банковских (Финансовых), Страховых и Государственных системах. Там оно черезвычайно регламентировано.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35703559
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Система была не только страховая и финансовая,как и дубликаты не только в 30годах,но и гораздо позже.Гладко бывает только в букварях у Селко.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35703571
Фотография Mr Marmelad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaГладко бывает только в букварях у Селко.

Дааа уж...
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35703582
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dogenexpla
Но можно и так.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
table Лица (
   ID,
   <атрибуты типа Лицо>
)

table Физ_Лица (
   <атрибуты типа Физ_Лицо>,
   ID references Лица
);

table ЮР_Лица (
   <атрибуты типа ЮР_Лицо>,
   ID references Лица
);

По ситуации. Я бы <атрибуты типа Лицо> лучше выкинул. Да Вы сами подумайте, какие там атрибуты могут быть :) ИНН и т.п.? Лучше в раздельных таблицах это держать, чем в атрибутах Лица. В крайнем случае создать еще таблицу Налогоплательщик и внести туда :)

а в догов в поле ДругаяСторона что вы вставлять будете???
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35703623
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автора в догов в поле ДругаяСторона что вы вставлять будете???
ID, что еще.Созаем view или процедуру

SELECT ID, NULL ParentID, FullName,PartyType
FROM Физ
UNION ALL
SELECT ID, ParentID, FullName,PartyType
FROM Юр

и используем ее в клиенте
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35703629
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ID должен быть уникальный в пределах БД.Добиться этого можно разными способами.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35703630
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
explaspно ведь и при такой реализации (которую я и использовал, но не до конца) просле того как приложение запущено уже неважно что там больше joinov

Лишие join'ы сильно влияют на производительность системы. Но выбор реализации конструкции наследования типов выходит за рамки данного форума. Нужно смотреть на конкретную СУБД и другие технические показатели, как то объём данных, методы доступа к таблицам, требования к производительности и д.р..

Ведь можно забить на ссылочную целостность и сделать так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
table Физ_Лица (
   <атрибуты типа Лицо>,
   <атрибуты типа Физ_Лицо>,
   ID
);

table ЮР_Лица (
   <атрибуты типа Лицо>,
   <атрибуты типа ЮР_Лицо>,
   ID
);

table Договор (
   <прочие атрибуты>
   заказчик, -- тут был references Лица, пока мы не удалили таблицу Лица
   исполнитель, -- тут был references Лица, пока мы не удалили таблицу Лица
   представитель_заказчика, -- тут был references Лица, пока мы не удалили таблицу Лица
);

где ID заполнять из общего счётчика. И т.д. и т.п. На самом деле ссылка из Договора на Лицо не есть лучшее решение. По сути, эта ссылка вычисляемая, если непосредственно в Договоре указаны реквизиты сторон. Если ограничиться только ссылками, такое вычисление должен будет выполнять оператор, который заводит договор. Если в договор включить реквизиты сторон, то такое вычисление может сделать машина и сохранить результат для дальнейшего использования. При изменении даных Лица, машина сможет проконтролировать и пересчитать ссылки, сообщить о том, что в договор нужно внести изменения.

А вот эта идея мне кажется стоящей для рассмотрения, на первый взгляд она может решить все проблемы, но необходимо посмотреть внимательней
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35703743
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp пишет:

> но в таком случае все ихние множественные аттрибуты получаетца тоже надо
> делать через наследование??
Что значить ? Нет, они просто будут у главного предка, т.е. и у всех его
наследников тоже, и с одинаковым механизмом работы с ними.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35703748
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp пишет:

> ну как же там не идет - там обсуждается единый ObjectID
А обычное наследование , без EAV, вы не приемлите ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35703754
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa пишет:

> Если только интересуют физики и юрики, сделать четные и нечетные ID без
> всяких лиц
паржал.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
25 сообщений из 111, страница 2 из 5
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Донормализовывался - караул!!! )
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]