powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Донормализовывался - караул!!! )
111 сообщений из 111, показаны все 5 страниц
Донормализовывался - караул!!! )
    #35701326
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем решил как по букве Науки понормализовывать все шо ни попадет под руку - и вот вышло:

-Физ-лицо
-Представители физлица
-банковские счета Физлица

-ЧПФЛ
-Представители ЧПФЛ
-банковские счета ЧПФЛ

-Юрлицо
-Представители Юрлица
-банковские счета Юрлица


правда создал еще

-Контрагент (тута их денормализовал в кучу :) )

типерь надо составить договор:
в котором должны участвовать Контраген, его Представитель и Банковские реквизиты

утут и уперся - шо типерь все взад денормализовывать по типу Контрагент? -> ПредставителиКонтрагента, БанковскиеСчетаКонтрАгента ?????

Как быть или это я зря начитался всяких букварей???????
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35701338
Фотография Mr Marmelad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spВ общем решил как по букве Науки понормализовывать все шо ни попадет под руку - и вот вышло:


А почему не упростить всё в одну форму

-Физ-лицо
-Представители физлица
-банковские счета Физлица

-ЧПФЛ
-Представители ЧПФЛ
-банковские счета ЧПФЛ

-Юрлицо
-Представители Юрлица
-банковские счета Юрлица


****************

- Лицо
- Вид Лица (Физ, ЧПФЛ, Юр)
- Представитель Лица
- Банковские реквизиты Лица

....

Где нормализация то?
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35701348
Фотография Mr Marmelad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr Marmelad
- Лицо
- Вид Лица (Физ, ЧПФЛ, Юр)
- Представитель Лица
- Банковские реквизиты Лица


Ну да ещё теперь вид будет КонтрАгент:
Вид ЛицаЮрЛицо ФизЛицо ЧПФЛ (простите не знаю что это такое) КонтрАгент
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35701355
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr MarmeladА почему не упростить всё в одну форму


- Лицо
- Вид Лица (Физ, ЧПФЛ, Юр)
- Представитель Лица
- Банковские реквизиты Лица

....

Где нормализация то?

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


Частный Предприниматель-Физическое Лицо
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35701373
Фотография Mr Marmelad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp
Низзя - у них аттрибуты разные и куча довесов разных

Ну единственный различительный аттрибут (на Американизме) бдет только:

SSN (для частного лица налогово - зависимого своим Такс Номером)
EIN (Employee Iditification Number - для юридического лица)

По Американским стандартам эти номера конфедициальны. Должны быть забанены и введены посредники - системно генерированые) Значит этот системный номер и Вид Лица - и будет первичным Ключом. Код представителя - Внешный Ключ. Банковский счёт (Код Банка + номер счёта) - ещё один Внешний ключ. Не вижу больше никаких особых различий в аттрибутике. Ну будет там название предприятия / имя человека... Ну и что И там и там должен быть Человек к которому обращаться за подписью. назовите ещё различия? плииииз.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35701381
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr Marmeladsp
Низзя - у них аттрибуты разные и куча довесов разных

Ну единственный различительный аттрибут (на Американизме) бдет только:

SSN (для частного лица налогово - зависимого своим Такс Номером)
EIN (Employee Iditification Number - для юридического лица)

По Американским стандартам эти номера конфедициальны. Должны быть забанены и введены посредники - системно генерированые) Значит этот системный номер и Вид Лица - и будет первичным Ключом. Код представителя - Внешный Ключ. Банковский счёт (Код Банка + номер счёта) - ещё один Внешний ключ. Не вижу больше никаких особых различий в аттрибутике. Ну будет там название предприятия / имя человека... Ну и что И там и там должен быть Человек к которому обращаться за подписью. назовите ещё различия? плииииз.

Ну это Вы зря не видите - там куча спецыфичных для данных сущностей аттрибутов - иначе бы не было смысла нормализовать
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35701386
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr Marmeladsp
Низзя - у них аттрибуты разные и куча довесов разных

Ну единственный различительный аттрибут (на Американизме) бдет только:

SSN (для частного лица налогово - зависимого своим Такс Номером)
EIN (Employee Iditification Number - для юридического лица)

По Американским стандартам эти номера конфедициальны. Должны быть забанены и введены посредники - системно генерированые) Значит этот системный номер и Вид Лица - и будет первичным Ключом. Код представителя - Внешный Ключ. Банковский счёт (Код Банка + номер счёта) - ещё один Внешний ключ. Не вижу больше никаких особых различий в аттрибутике. Ну будет там название предприятия / имя человека... Ну и что И там и там должен быть Человек к которому обращаться за подписью. назовите ещё различия? плииииз.

лицо
--------------
PersonID
PersonSalutationID
F
I
O
SexID
BirthDate
Residency
INN
+++++
-внутренние паспорта
-зарубежные
-водительские права
-пенсионные удостоверения
-фактические адреса проживания
-контактные телефоны
-емайлы
-instant messengers
-уполномоченные лица
-банковские счета



юрлицо
----------
EnterpriseID
ParentEnterpriseID
EDRPOU
ShortTitle
FullTitle
OrgFormID
AddressID
SiteURL
++++++++++++
-фактические адреса проживания
-контактные телефоны
-емайлы
-instant messengers
-уполномоченные лица
-банковские счета
-безбалансовые подразделения
-балансовые подразделения




чпфл
-------
PrivateEntrepreneurID
PersonID
INN
Series
No
ActivityCategoryID
AddressID
IssuedBy
SiteURL
++++++++++
-фактические адреса проживания
-контактные телефоны
-емайлы
-instant messengers
-уполномоченные лица
-банковские счета
-безбалансовые подразделения
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35701393
Фотография Mr Marmelad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я пытаюсь хоть одну систему вспомнить где бы мы объекты трудовой (бизнес) деятельности - читай - стороны контрактов - разводили в три (или более) сущности - ни одной не припомню. Все в одной сущности и потом договор сводится просто к формулировке ЗАКАЗЧИК (объект А со всеми своими аттрибутами) вступает в отношения с ИСПОЛНИТЕЛЕМ (объект Б со всеми такими же аттрибутами) при посредстве КОНТРАГЕНТА (объект В со всеми такими же аттрибутами) для выполнения ЗАКАЗА (Проекта и так далее) СРОК - ляляля (Начало Конец) УСЛОВИЯ - ляляля (пп1 ...пп125)

Подписи сторон...
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35701399
Фотография Mr Marmelad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой а что за бизнес то у Вас... Colleague... Выглядит как контрразведка близко к ФБР


УДОСТОВЕРЕНИЕ ЛИЧНОСТИ РУКОВОДИТЕЛЯ (Ответственного Лица)
-внутренние паспорта
-зарубежные
-водительские права
-пенсионные удостоверения



АДРЕСНАЯ
-фактические адреса проживания
-контактные телефоны
-емайлы
-instant messengers

[quote:]КОД ОБРАТНЫЙ
-уполномоченные лица[/quote]


:БАНКОВСКИЕ
-банковские счета
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35701402
Фотография Mr Marmelad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp
Ну это Вы зря не видите - там куча спецыфичных для данных сущностей аттрибутов - иначе бы не было смысла нормализовать

Так вот нормализации как раз я у Вас и не увидел. Сплошная ДЕ-Нормализация. Я не говорю Коллега что это плохо. Просто согласитесь - повторение той же сущности (участник бизнеса) в трёх и более таблицах - будет называться ДЕ-НОРМАЛИЗАЦИЕЙ
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35701824
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Marmelad, советы в стиле Селко хороши только в теории.SSN не может быть первичным ключем, он не уникален.
Нормализация нужна в разумных пределах.Сводить все одну таблицу в данном случае я бы не стал
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35701875
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp wrote:

> Низзя - у них аттрибуты разные и куча довесов разных
Надо наследование делать. Вывести общее, от него наследовать
частное. Юрлицо, физлицо, ИЧП - у них должен быть общий предок,
субъект хоздеятельности (назвать можно по любому). вот его
и в договоры можно совать.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35701939
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spутут и уперся - шо типерь все взад денормализовывать по типу Контрагент? -> ПредставителиКонтрагента, БанковскиеСчетаКонтрАгента ?????С чего вы взяли, что это денормализованное представление?
Просто надо специфичные атрибуты для каждого типа контрагента - вынести в отдельную таблицу.

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

Так вот нормализации как раз я у Вас и не увидел. Сплошная ДЕ-Нормализация. Я не говорю Коллега что это плохо. Просто согласитесь - повторение той же сущности (участник бизнеса) в трёх и более таблицах - будет называться ДЕ-НОРМАЛИЗАЦИЕЙ

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

И как Вы себе представляете единую таблицу с аттрибутами и ФизЛица И ЮрЛица и ЧПФЛ? - или необходимо как в той пьесе - тут мы не читаем, тут мы рыбу заворачивали, а тут ваще ничего не надо!? )
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35701990
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr MarmeladОй а что за бизнес то у Вас... Colleague... Выглядит как контрразведка близко к ФБР


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

> Низзя - у них аттрибуты разные и куча довесов разных
Надо наследование делать. Вывести общее, от него наследовать
частное. Юрлицо, физлицо, ИЧП - у них должен быть общий предок,
субъект хоздеятельности (назвать можно по любому). вот его
и в договоры можно совать.


Я так и сделал - у меня есть 2 сущности еще:

Контрагент
---------------
PersonID
PrivateEntrepreneurID
EnterpriseID

СубъектХозДеятельности
----------------------------
EnterpriseID
PrivateEntrepreneurID

но в таком случае все ихние множественные аттрибуты получаетца тоже надо делать через наследование??
ТелефоныКонтрагента, ПредставителиКонтрагента, Банковские реквизитыКонтрагента, Структурные подразделенияКонтрАгента ??????
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35702024
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Belyspутут и уперся - шо типерь все взад денормализовывать по типу Контрагент? -> ПредставителиКонтрагента, БанковскиеСчетаКонтрАгента ?????С чего вы взяли, что это денормализованное представление?
Просто надо специфичные атрибуты для каждого типа контрагента - вынести в отдельную таблицу.

тут такая структура уже обсуждалась.

блин ну сколько уже можно говорить на данном форуме что для EAV(который там обсуждаецца) нужен уже готовый движок - иначе это будет геморрой на всю оставшуюся жизнь!
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35702050
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Belyspутут и уперся - шо типерь все взад денормализовывать по типу Контрагент? -> ПредставителиКонтрагента, БанковскиеСчетаКонтрАгента ?????С чего вы взяли, что это денормализованное представление?
Просто надо специфичные атрибуты для каждого типа контрагента - вынести в отдельную таблицу.

тут такая структура уже обсуждалась.

кстати там /topic/480889&pg=3 есть схемка в которой мои сущности и выделены Лицо, Компания и т.д.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35702062
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
про EAV речь вообще не идет.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35702104
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp,

да еще один тезис забыл в некоторых договорах должны участвовать разные сучности - в одних только физлица в других только СубъектыХозДеятельности, в третьих только Предприятия
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35702110
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmпро EAV речь вообще не идет.

ну как же там не идет - там обсуждается единый ObjectID
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35702141
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Belyspутут и уперся - шо типерь все взад денормализовывать по типу Контрагент? -> ПредставителиКонтрагента, БанковскиеСчетаКонтрАгента ?????С чего вы взяли, что это денормализованное представление?
Просто надо специфичные атрибуты для каждого типа контрагента - вынести в отдельную таблицу.

тут такая структура уже обсуждалась.

и тут возникает вопрос: как я этого гибрида на клиенте должен буду отображать???
утут читаем, утут не читаем - это от другой сучности, утут ваще не смотрите пока!??

так у меня есть Предприятие - на клиенте есть объект, соответствующий этой сучности с конечным и заранее известным набором свойств - его можно однозначно отобразить и обработать ввод данных

а в этой схеме как - если допустим структурные подразделения относяцца только к СХД, а самостоятельные(балансовые) подразделения исключительно только к Предприятиям

Как в единой той структуре контролировать эти ограничения? как их отображать/неотображать на клиенте????
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35702488
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr MarmeladДа я пытаюсь хоть одну систему вспомнить где бы мы объекты трудовой (бизнес) деятельности - читай - стороны контрактов - разводили в три (или более) сущности - ни одной не припомню. Все в одной сущности и потом договор сводится просто к формулировке ЗАКАЗЧИК (объект А со всеми своими аттрибутами) вступает в отношения с ИСПОЛНИТЕЛЕМ (объект Б со всеми такими же аттрибутами) при посредстве КОНТРАГЕНТА (объект В со всеми такими же аттрибутами) для выполнения ЗАКАЗА (Проекта и так далее) СРОК - ляляля (Начало Конец) УСЛОВИЯ - ляляля (пп1 ...пп125)

Подписи сторон...

ну я такое видел в 1С - там пишецца Наименование, а подним понимаецца и название Предприятия и Название ЧП и ФИО !))

Правильно я понял Вашу мысль?
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35702571
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
spMr Marmeladsp
Ну это Вы зря не видите - там куча спецыфичных для данных сущностей аттрибутов - иначе бы не было смысла нормализовать

Так вот нормализации как раз я у Вас и не увидел. Сплошная ДЕ-Нормализация. Я не говорю Коллега что это плохо. Просто согласитесь - повторение той же сущности (участник бизнеса) в трёх и более таблицах - будет называться ДЕ-НОРМАЛИЗАЦИЕЙ

Насколько я понимаю нормализацию - это разнесение аттрибутов, относящихся к разным сущностям по разным талицам - где же у меня денормализация???

Неправильно понимаешь. Нормализация, это устранение аномалий обновления данных при МИНИМАЛЬНОМ числе отношений. А ты тут понахреначил... в 3 раза больше чем нужно.

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

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

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

А что тут представлять то. Просто таблица со всеми этими атрибутами. Так СУБД Оракл поступает, когда в одной таблице должны храниться разнотипные объекты.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #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
Донормализовывался - караул!!! )
    #35703760
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
expla пишет:

> Лишие join'ы сильно влияют на производительность системы.

Видимо, тут забыли добавить частицу/приставку НЕ.

Следует читать:

"Лишие join'ы НЕсильно влияют на производительность системы"
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35703776
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
sp пишет:

> но в таком случае все ихние множественные аттрибуты получаетца тоже надо
> делать через наследование??
Что значить ? Нет, они просто будут у главного предка, т.е. и у всех его
наследников тоже, и с одинаковым механизмом работы с ними.


Проблема с наследованиемв том что основные аттрибуты сущностей находятся в наследниках (в таблице КонтрАгенты будут храниться только ссылки на описание ФизЛица, ЮрЛица и ЧП) а общие аттрибуты будут в предках что вызывает проблемы при обработке данных:
при редактировании/просмотре записи Контрагент мы будем видеть закладки с табличными представлениями Банковских счетов, Представителей, Контактной информацией, а к примеру чтобы посмотреть паспортные данные лица - я должен нажать пимпу на форме Контрагента, чтобы открыть форму ФизЛица и только на ней я могу посмотреть на закладке Паспорта текущие данные о паспорте граджанина или гражданки

Я уже не говорю о проблемах при создании у Контрагента Представителей - этот объект должен поступать по принципу тут читаем, тут не читаем, тут мы рыбу заворачивали - например представители ФизЛица в качестве основания могут иметь исключительно доверенность, а у предприятия либо Устав, либо Доверенность
В то время как объект ПредставителиПредприятия или ПредставителиФизлица легко контролируют такую ситуацию на уровне структур данных и на уровне клиентского кода

Вот вам и проблемы
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35703825
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr MarmeladНе соглашусь по теме SSN - по условию этот номер уникален.Не знаю как в США, но у нас в болотистой местности филиал в регионе будет иметь тот же самый ИНН, что и основная организация. Что делает этот ИНН непригодным к использованию в качестве ключа для контрагента.

Для SP : в приведенной мной ссылке - нет никакого EAV. Просто ко всем таблицам, которые вы нарисовали (физ лицо, юр лицо) добавляется еще таблица "Объект" (у вас это контрагент), которая их связывает.

Что касается ограничений целостности на уровне БД - то и этот вопрос решаемый созданием дополнительных уникальных ключей по двум полям (OBJECT_ID и TYPE_ID) и использование FK на эту пару. В добавление - если для поля в какой-то таблице использовать CHECK constraint вида TYPE_ID = 13, то тем самым решается проблема "в это поле можно вставлять только Физлиц".

Если на эту проблему не заморачиваться на уровне БД, то проверку правильности присвоения ссылок можно вынести на уровень приложения.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35703844
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spПроблема с наследованиемв том что основные аттрибуты сущностей находятся в наследниках (в таблице КонтрАгенты будут храниться только ссылки на описание ФизЛица, ЮрЛица и ЧП) а общие аттрибуты будут в предках что вызывает проблемы при обработке данных:
при редактировании/просмотре записи Контрагент мы будем видеть закладки с табличными представлениями Банковских счетов, Представителей, Контактной информацией, а к примеру чтобы посмотреть паспортные данные лица - я должен нажать пимпу на форме Контрагента, чтобы открыть форму ФизЛица и только на ней я могу посмотреть на закладке Паспорта текущие данные о паспорте граджанина или гражданкиНу как бы вам сказать...

1) Интерфейс можно сделать ТАКОЙ КАК НАДО, а не такой как привыкли делать некоторые.
одна таблица, одна закладка - это не догма .
2) Сделайте несколько VIEW "Все физлица", "Все Юр лица" и используйте их.
3) У вас всеравно будут разные формы для Юрлиц и Физлиц. Скорее всего разные, потому что работа с ними разная проходит. Поэтому не вижу смысла вобще создавать форму "Контрагент непонятно какой". Для контрагента определенного типа система должна открывать правильную форму. Вот и все.

spЯ уже не говорю о проблемах при создании у Контрагента Представителей - этот объект должен поступать по принципу тут читаем, тут не читаем, тут мы рыбу заворачивали - например представители ФизЛица в качестве основания могут иметь исключительно доверенность, а у предприятия либо Устав, либо Доверенность
В то время как объект ПредставителиПредприятия или ПредставителиФизлица легко контролируют такую ситуацию на уровне структур данных и на уровне клиентского кода.На уровне клиентского кода - вобще нет никаких проблем контроля. Ни в одном из вариантов. Просто контроль может быть неверный :)

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

> Проблема с наследованиемв том что основные аттрибуты сущностей находятся
> в наследниках (в таблице КонтрАгенты будут храниться только ссылки на
> описание ФизЛица, ЮрЛица и ЧП) а общие аттрибуты будут в предках что
> вызывает проблемы при обработке данных:

Ну, нет там никаких особых проблем.

> при редактировании/просмотре записи Контрагент мы будем видеть закладки
> с табличными представлениями Банковских счетов, Представителей,
> Контактной информацией, а к примеру чтобы посмотреть паспортные данные
> лица - я должен нажать пимпу на форме Контрагента,


чтобы открыть форму
> ФизЛица и только на ней я могу посмотреть на закладке Паспорта текущие
> данные о паспорте граджанина или гражданки

А что , сразу форму физлица нельзя открыть ?

> Вот вам и проблемы

Да надуманные какие-то проблемы.
Надо учить формы работать и с наследниками тоже и быть адаптивными
к тому, какой класс объекта они редактируют, да. Ну и что ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35704006
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bely1) Интерфейс можно сделать ТАКОЙ КАК НАДО, а не такой как привыкли делать некоторые.
одна таблица, одна закладка - это не догма .
2) Сделайте несколько VIEW "Все физлица", "Все Юр лица" и используйте их.

это не кошерно, учили не так!

p.s. на самом деле +1. Не пойму в чем проблема вообще.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35704021
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmBely1) Интерфейс можно сделать ТАКОЙ КАК НАДО, а не такой как привыкли делать некоторые.
одна таблица, одна закладка - это не догма .
2) Сделайте несколько VIEW "Все физлица", "Все Юр лица" и используйте их.

это не кошерно, учили не так!

p.s. на самом деле +1. Не пойму в чем проблема вообще.

Поясню: у меня каждый клиентский объект работает сосвоей сущностью в базе: т.е он отрисовывает грид и открывает форму для сущности, аесли я работаю с Контрагентом и в его гриде пытаюсь открыть запись другого объекта - то это как-то не кашерно!
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35704082
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp
Проблема с наследованиемв том что основные аттрибуты сущностей находятся в наследниках (в таблице КонтрАгенты будут храниться только ссылки на описание ФизЛица, ЮрЛица и ЧП) а общие аттрибуты будут в предках что вызывает проблемы при обработке данных
Проблема в том, что вы неправильно понимаете сами принципы наследования (основы так сказать). В это им вся проблема. Общие атрибуты хранятся как раз в базовой (родительской) таблице. А второстепенные, уточняющие,индивидуальные и т.п. хранятся в наследниках.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35704088
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spiscrafmBely1) Интерфейс можно сделать ТАКОЙ КАК НАДО, а не такой как привыкли делать некоторые.
одна таблица, одна закладка - это не догма .
2) Сделайте несколько VIEW "Все физлица", "Все Юр лица" и используйте их.

это не кошерно, учили не так!

p.s. на самом деле +1. Не пойму в чем проблема вообще.

Поясню: у меня каждый клиентский объект работает сосвоей сущностью в базе: т.е он отрисовывает грид и открывает форму для сущности, аесли я работаю с Контрагентом и в его гриде пытаюсь открыть запись другого объекта - то это как-то не кашерно!
никто не мешает сделать так, чтобы при любой схеме физической организации БД
1. Отображать объекты разных типов в одном гриде
2. Отображать объекты разных типов в разных гридах
3. открывать форму редактирования/просмотра свойств объекта из одного гида или из нескольких
4...
Вы скажите в чем проблема. В организации БД или в интерфейсе? Потому что ни в первом ни во втором случае проблем нет, все давно решено и повсеместно используется.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35704094
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmsp
Проблема с наследованиемв том что основные аттрибуты сущностей находятся в наследниках (в таблице КонтрАгенты будут храниться только ссылки на описание ФизЛица, ЮрЛица и ЧП) а общие аттрибуты будут в предках что вызывает проблемы при обработке данных
Проблема в том, что вы неправильно понимаете сами принципы наследования (основы так сказать). В это им вся проблема. Общие атрибуты хранятся как раз в базовой (родительской) таблице. А второстепенные, уточняющие,индивидуальные и т.п. хранятся в наследниках.

а когда нет общих основных??? имя, фамилия и отчество или паспорта - являются общими??? вот и я их не стал делать общими
просто вы невнимательно читаете мои посты!

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

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

-Физ-лицо
-Представители физлица
-банковские счета Физлица

-ЧПФЛ
-Представители ЧПФЛ
-банковские счета ЧПФЛ

-Юрлицо
-Представители Юрлица
-банковские счета Юрлица


правда создал еще

-Контрагент (тута их денормализовал в кучу :) )

типерь надо составить договор:
в котором должны участвовать Контраген, его Представитель и Банковские реквизиты

утут и уперся - шо типерь все взад денормализовывать по типу Контрагент? -> ПредставителиКонтрагента, БанковскиеСчетаКонтрАгента ?????

Как быть или это я зря начитался всяких букварей???????
Звиняюсь, я видать что-то пропустил..
О какой нормализации идет речь?
Если нормализация, то вспомним определение, если негде вспомнить.. то что-то типа – «все атрибуты должны зависеть от одного ключа и ни как иначе, все что может или зависит, или может быть внести неоднозначность – идет лесом, т.е. в другую таблицу».. что-то типа этого :)
А по тому: лица отдельно, можно включить к ним признак (физ –юр – бомж и т.д.), но это только дополнение.. ибо «лицо» оно и есть лицо и не что больше, а если это что-то иное.. тогда и звать его иначе, «фирма» например..
«Представители физлица» - это что за звери? Тоже лица? Тогда в первой таблице, иначе думаем с определением но в единственном числе, т.к. набор есть множественное число а запись есть в единственном..
Банковские счета.. Опять туда же.. не множественное число а единственное. И что что их много, но каждый счет это отдельная тема с кучей атрибутов возможных и т.д. возможно это просто 20-ти значный код не суть.. В любом случае – это отдельная таблица.
Ну и по остальному также..
Или, это уже таблицы связей? Тогда, эти триплеты не канают.. ибо нет возможность однозначно сопоставить зависимости.
Возможно я что-то пропустил или не понял. Но есть изумительное средство – view которое непонятно как, но решает проблемы вызывающие желание дерномализовать..
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35704121
Фотография stells2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stells2все что может или зависит.
все что может или зависит от чего то еще
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35704122
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И так начнем - я обозначу структуру как я ее вижу, а вы поправьте там где я упаду пьяным )

ФизЛицо
-------------
ID Физлица
...аттрибуты лица...


ЮрЛицо
------------------
ID ЮрЛица
...аттрибуты юрлица


ЧП
-------------------
ID ЧП
ID Физлица
...аттрибуты ЧП..


ПаспортаФизлица
---------------------
ID Паспорта
ID Физлица
... аттрибуты паспорта...

ПенсионныеУдостоверения
-------------------------
ID Удостоверения
ID Физлица
...аттрибуты физлица...

БалансовыеПодразделенияЮрЛица
--------------------------------------
ID БалансовогоПодразделения
ID ЮрЛица
...аттрибуты...


КОНТРАГЕНТ
------------------------
ID Контрагента
ID Физлица
ID ЮрЛица
ID ЧП

СубъектХозДеятельности - СХД
---------------------------
ID Субъекта
ID ЮрЛица
ID ЧП


ФактическиеАдресаКонтрагента
----------------------------------
ID ФактичАдреса
ID Контрагента
ID Адреса - ссылка на экземпляр сущности Адрес

ТелефоныКонтрагента
----------------------------------
ID ТелефонаКонтрагента
ID Контрагента
ID Телефона - ссылка на экземпляр сущности телефон

БезбалансовыеПодразделенияКонтрАгента
-------------------------------------------
ID Подразделения
ID Контрагента
...аттрибуты...


Банки
----------------------
ID Банка
...аттрибуты...


БанковскиеРеквизитыКонтрагента
--------------------------------------
ID Реквизита
ID Контрагента
ID Банка
...аттрибуты...


ПредставителиКонтрагента
--------------------------------
ID Представителя
ID Контрагента



ДокументыПредставителя
-----------------------------
ID Документа
ID Представителя
ID Устава
ID Доверенности


Устав
----------------
ID Устава
Дата выдачи = 01.01.1900
Срок действия = 01.01.3000


Довенренности
-------------------------
ID Доверенности
ID Контрагента
ID Физлица
Номер
Серия
Дата выдачи
Срок действия


И тут появляются вопросы:

-для СХД также необходима информация: ФактическиеАдреса, Телефоны, БезбалансовыеПодразделения, БанковскиеРеквизиты, Представители - создавать дублирующие структуры????

-как в ПредставителиКонтрагента для Физлица и ЧП пресечь на корню даже предложение о документе Устав??????
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35704132
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу допечатать недопечатки

ПредставителиКонтрагента
--------------------------------
ID Представителя
ID Контрагента
ID Физлица
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35704726
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spКОНТРАГЕНТ
------------------------
ID Контрагента
ID Физлица
ID ЮрЛица
ID ЧП

Нчнем с этого.

ID Физлица,ID ЮрЛица,ID ЧП - в топку. Остается только ID Контрагента
В соответствующих таблицах: ФизЛицо, ЮрЛицо, ЧП - первичный ключ: ID Контрагента, а не свой собственный.

PS: Всетаки, внимательно почитайте и разберитесь со скриптами создания таблиц в этой теме .
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35704733
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В довесок еще в контрагента надо добавить поле "ТИП контрагента", чтобы можно было легко определить кто у нас кто.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35705135
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelyВ довесок еще в контрагента надо добавить поле "ТИП контрагента", чтобы можно было легко определить кто у нас кто.

Вот тут не согласен - зачем мне тип контрагента если заполненное конкретное поле само за себя говорит что за тип контрагента

В такой схеме получается что несколько разных наследников могут ссылаться на одного контрагента - что для данной системы есть низзя!!!!!
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35705148
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelyspКОНТРАГЕНТ
------------------------
ID Контрагента
ID Физлица
ID ЮрЛица
ID ЧП

Нчнем с этого.

ID Физлица,ID ЮрЛица,ID ЧП - в топку. Остается только ID Контрагента
В соответствующих таблицах: ФизЛицо, ЮрЛицо, ЧП - первичный ключ: ID Контрагента, а не свой собственный.

PS: Всетаки, внимательно почитайте и разберитесь со скриптами создания таблиц в этой теме .

Интересная идея - никогда так не думал о наследовании!!!!
Надо покумекать - слишком уж нестандартно но многообещающе!
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35705602
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spИнтересная идея - никогда так не думал о наследовании!!!!
Надо покумекать - слишком уж нестандартно но многообещающе! НАКОНЕЦ-то НАЧАЛИ ЧИТАТЬ ТО ЧТО ВАМ ПИШУТ!
А прошло-то всего-то чуть более суток
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35706153
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelyspИнтересная идея - никогда так не думал о наследовании!!!!
Надо покумекать - слишком уж нестандартно но многообещающе! НАКОНЕЦ-то НАЧАЛИ ЧИТАТЬ ТО ЧТО ВАМ ПИШУТ!
А прошло-то всего-то чуть более суток

Ничего подобного!!!!
это было написано в первый раз в таком понятном виде !!!!! :)
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35706160
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BelyspКОНТРАГЕНТ
------------------------
ID Контрагента
ID Физлица
ID ЮрЛица
ID ЧП

Нчнем с этого.

ID Физлица,ID ЮрЛица,ID ЧП - в топку.

Зачем так стразу в топку. Вариант sp, один из способов реализации наследования. К стати, пока в оракле наследование не поддерживалось, такой подход был описан в документации.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35706172
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
explaЗачем так стразу в топку. Вариант sp, один из способов реализации наследования. К стати, пока в оракле наследование не поддерживалось, такой подход был описан в документации.1) Как мы будем интерпретировать запись, если у нас заполнено сразу три поля?
2) Если у нас появится новый тип - будем добавлять новое поле?
А если этих типов 50 ? Как там насчет нормализации?
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35706189
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИнтересная идея - никогда так не думал о наследовании!!!!
Надо покумекать - слишком уж нестандартно но многообещающе!
Все это давно известно.Полистай 2ю главу в букваре "Data Model Resource Book".
В общем виде все твои сущности там рассмотрены
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35706337
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BelyexplaЗачем так стразу в топку. Вариант sp, один из способов реализации наследования. К стати, пока в оракле наследование не поддерживалось, такой подход был описан в документации.1) Как мы будем интерпретировать запись, если у нас заполнено сразу три поля?
2) Если у нас появится новый тип - будем добавлять новое поле?
А если этих типов 50 ? Как там насчет нормализации?

1) так не заполняйте сразу три поля. Ограничения целостности то на что? Наконец, лишние значения можно просто игнорировать используя приоритеты. К стати, в вашем варианте нет гарантии, что Контрагент существует, а соответсвующие ФЛ, ЧП и т.п. отсутствуют - нет и никакими декларативными ограничениями целостности вы эту проблему не решите. А в отвергнутом варианте всё это легко решается внешними ключами и проверками на записи.

2) Ну что поделаешь... Всё равно на новый тип систему придётся затачивать хоть так, хоть эдак.

Количество типов не имеет значения пока СУБД позволяет добавлять поля в таблицу и никакого нарушения НФ тут нет. Или вы считаете, что нормализация, это когда количество колонок в таблице уменьшается?
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35706566
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
explaНаконец, лишние значения можно просто игнорировать используя приоритеты.Если сделали из ЧП организацию, то до данных человека уже не добраться в интерфейсе. Так чтоли? Так себе решеньице...

explaК стати, в вашем варианте нет гарантии, что Контрагент существует, а соответсвующие ФЛ, ЧП и т.п. отсутствуют - нет и никакими декларативными ограничениями целостности вы эту проблему не решите. А в отвергнутом варианте всё это легко решается внешними ключами и проверками на записи.Советую и Вам почитать это обсуждение .

В этой модели все зависит как далеко хочется пойти в настройке constraint-ов в БД, а что решите контролировать уже на клиенте.

explaКоличество типов не имеет значения пока СУБД позволяет добавлять поля в таблицу и никакого нарушения НФ тут нет. Или вы считаете, что нормализация, это когда количество колонок в таблице уменьшается?Я считаю, что значение атрибута ID Физлица зависит от значений атрибутов ID ЮрЛица и ID ЧП .
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35706931
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaавторИнтересная идея - никогда так не думал о наследовании!!!!
Надо покумекать - слишком уж нестандартно но многообещающе!
Все это давно известно.Полистай 2ю главу в букваре "Data Model Resource Book".
В общем виде все твои сущности там рассмотрены

А где бы ее посмотреть ? :)
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35706990
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spА где бы ее посмотреть ? :) Покупай и смотри
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35707031
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelyspА где бы ее посмотреть ? :) Покупай и смотри

Нифигаж сибе!!! а что это у нее цена как у телевизора??? или комуто на жисть не хватает??? :)
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35707129
RodionAT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю структуру -
Таблица 1: ИДКоннтрагента, ИдТипКонтрагента, НазваниеКонтрагента
Таблица 2: ИдТипКонтрагента, НазваниеТипаКонтрагента
Таблица 3: ИдКонтрагента, ИдРеквизитаКонтрагента, ОписаниеРеквизитаКонтрагента
Таблица 4: ИдТипКонтрагента, ИдРеквизитаКонтрагента, НазваниеРеквизитаКонтрагента
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35707555
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RodionATПредлагаю структуру -
Таблица 1: ИДКоннтрагента, ИдТипКонтрагента, НазваниеКонтрагента
Таблица 2: ИдТипКонтрагента, НазваниеТипаКонтрагента
Таблица 3: ИдКонтрагента, ИдРеквизитаКонтрагента, ОписаниеРеквизитаКонтрагента
Таблица 4: ИдТипКонтрагента, ИдРеквизитаКонтрагента, НазваниеРеквизитаКонтрагентаЗачем было писать столько буков. Написали бы просто: EAV
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35707665
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНифигаж сибе!!! а что это у нее цена как у телевизора??? или комуто на жисть не хватает??? :)
Проще покупать в pdf, дешевше и быстрее.Если десантом заброшен и не слышал o P2P,я перешлю тебе на почту(ограничения на размер есть?).Нарисуй сначала логическую схему, а затем решай каким образом реализовывать генерализацию.Твой случай частный, можно обойтись только тремя таблицами для основных сущностей
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35707760
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверь почту
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35708081
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa,
и в pdf искал и на P2P. На амазоне можно твёрдую книгу купить с доплатой за электронный доступ. В почту файл может не влезть. Кинь, пзл. в почту ссылочку на торрент.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35708089
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaПроверь почту

Спасибо большое, получил!!!
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35708510
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35708513
RodionAT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelyRodionATПредлагаю структуру -
Таблица 1: ИДКоннтрагента, ИдТипКонтрагента, НазваниеКонтрагента
Таблица 2: ИдТипКонтрагента, НазваниеТипаКонтрагента
Таблица 3: ИдКонтрагента, ИдРеквизитаКонтрагента, ОписаниеРеквизитаКонтрагента
Таблица 4: ИдТипКонтрагента, ИдРеквизитаКонтрагента, НазваниеРеквизитаКонтрагентаЗачем было писать столько буков. Написали бы просто: EAV
А что такое EAV?
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35709467
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RodionATА что такое EAV? EAV
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35716747
Sinix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эммм. А можно поинтересоваться - юрлица/физлица и т.п. у вас вне договора не существуют? И если на одно лицо несколько договоров - данные будут создаваться несколько раз?

Если не так, то вариантов реализации отдельных таблиц мало: либо разграничение по диапазонам идентификаторов, либо общая таблица для общих атрибутов (аля наследование), либо составные ключи. В первом случае тяжело сопоставлять что есть что, в последних двух - тяжко проверить уникальность.

ИМХО, EAV сюда пихать не стоит - чистейший оверкилл.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35718707
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sinixлибо общая таблица для общих атрибутов (аля наследование), ... в последних двух - тяжко проверить уникальность.В чем именно тяжесть проверки уникальности?
Это вобще будет PK/FK на уровне БД - она и будет проверять.

Или вы про что-то другое говорите?
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35718797
Sinix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да об этом уже выше писалось - надо как-то гарантировать, чтобы ID разнотипных сущностей не пересекались. Если не использовать непересекающиеся диапазоны, то можно ввести поле - тип сущности - в общую таблицу и проверку в CHECK(через функцию) | TRIGGER: чтобы сущность с вносимым ID существовала (если она существует) только в таблице, соответствующей конкретному типу. Или использовать GUID :)
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35720152
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sinix,

займитесь лучше проектированием транзакций. Правильные транзакции всегда оставляют за собой правильные данные. FK и PK нужно рассматривать как механизм защиты данных от разрушения в результате параллельного выполнения конкурирующих транзакций (одна удаляет PK, другая в то же время добавляет FK). Строить на FK правила проверки правильности данных пустая трата времени (данные легко проверить простыми SQL запросами).

Ваши FK лишь не позволят работать неправильным транзакциям, которых не должно быть в системе.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35721468
Sinix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
explaSinix,

займитесь лучше проектированием транзакций. Правильные транзакции всегда оставляют за собой правильные данные. FK и PK нужно рассматривать как механизм защиты данных от разрушения в результате параллельного выполнения конкурирующих транзакций (одна удаляет PK, другая в то же время добавляет FK). Строить на FK правила проверки правильности данных пустая трата времени (данные легко проверить простыми SQL запросами).

Ваши FK лишь не позволят работать неправильным транзакциям, которых не должно быть в системе.

та-та ?)

Умиляют категоричесие суждения про лёгкость поверки запросами и про правильные транзакции.
Вы случаем не путаете транзакции с запросами? Подучите матчасть, плиииз.

Как нам помогут транзакции, когда в одной транзакции создаётся общая сущность с ID=1 и для неё создаются details в таблицах юрлиц и физлиц?
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35721945
vbgd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Про нормализацию как таковую.
Сначала надо попытаться сделать, как учат в книгах.
Необходимо иметь перед глазами схему. Рекомендую Excel.

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

Если в запросе связывается более трех таблиц, то, мне кажется,
надо сделать шаг назад и добавить лишние поля.
Например, в таблице накладных держать не только ID покупателя,
но и его адрес и т.д.

Иначе падает производительность.

Конечно, придется обновлять ненормализованные поля уже на уровне приложения,
но что делать...

Я с этим сталкивался при разработке систем товарного учета.
Порядка ста таблиц в базе.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35722373
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SinixКак нам помогут транзакции, когда в одной транзакции создаётся общая сущность с ID=1 и для неё создаются details в таблицах юрлиц и физлиц?

Вот и придумайте как построить транзакцию, чтобы всё было пучком. Возможно, блокирвки придётся навешивать и т.п. А я пока матчасть почитаю. Как сделаете, доложите, пзл..
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35722775
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SinixКак нам помогут транзакции, когда в одной транзакции создаётся общая сущность с ID=1 и для неё создаются details в таблицах юрлиц и физлиц?

Это пример неправильной транзакции, которая оставляет за собой противоречивые данные. Ещё пример неправильной транзакции, транзакция которая выполняет дебетовую проводку, но "забывает" выполнить кредитовую (вы конечно можете отказаться от принципа двойной записи, но не факт, что жертва будет оправданной).

Вообще, вы пытаетесь смоделировать в реляционной БД понятие связи, которого нет в реляционной модели. Мы всегда можем взять произвольные отношения и соеденить их произвольным образом, так что понятие связи после ER модели фактически утрачивается в реляционной БД и вновь возникает только в SQL запросах и методах. FK только указывает на возможность наличия связи, но в БД может быть много логических связей, которые невозможно описать в терминах FK, даже привлекая вспомогательные структуры.

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

2 vbgd:
1) ранняя оптимизация зло.
2) изменение структуры данных ради оптимизации зло

Единственное, чего можно добиться денормализацией - повышение производительности select запросов. (опечатка оператора была). Это должно отражаться в накладной? Если нет - то какой адрес настоящий? Если да, то потребуется писать триггер на обновление у таблицы "заказчики" и обновлять в нём все "кэшированные" адреса. Если у вас в накладных хранятся данные и из другой таблицы - вам придётся писать триггеры и на эти таблицы. В результате одна операция правки адреса утопит в блокировках (если это блокировочник) половину БД.

Да, здесь выигрыш от денормализации будет сопоставим с построением составного индекса по ключу заказчика/адресу. Адрес может быть просто включённым полем. Всё просто :)

2 expla:
Для начала давайте договоримся:
Запрос - обращение пользователя к СУБД, содержащее в себе несколько выражений DML/DDL
Транзакция - средство обеспечения ACID для пользовательского запроса. Вы не можете никак вмешаться в алгоритм работы транзакции. Максимум, что вам удастся - порулить блокировками - опять-таки через ващ запрос.

Крактко: Транзакция не может быть некорректной, некорректным может быть только запрос.

Как я буду проверять корректность запроса - заранее не скажу. Может, триггеры. Может, проверки на столбце через функцию. Смотреть надо. Но то что дело реализуемое - эт точно.

2 mcureenab:

Про неправильность транзакций - выше. Вам что, всем по одному недоучебнику что-то рассказывали ?:) // сорри, не удержался.

Про "нетривиальность" связи. Скажите, а ОО(Р)СУБД как-то иначе реализуют такие проверки? Уличная магия, да? :)

Про непригодность ограничений: не, вы точно какой-то не тот учебник курили. Кто вам сказал, что ER-диагармма - наше всё? У ER есть свои недостатки и преимущества, но вот описывать в ней концептуальную модель - брр :) Скажите, а как вы отслеживаете корректность данных? Своя логика в каждом запросе? Что будет, если всего в одном запросе будет допущена ошибка в проверке ограничений?

P.S. Я ничего не пытаюсь использовать и реализовывать. Подняли тему, я пришёл и сказал своё мнение. Закрыли тему? :)
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35724503
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sinix
2 expla:
Для начала давайте договоримся:
Запрос - обращение пользователя к СУБД, содержащее в себе несколько выражений DML/DDL
Транзакция - средство обеспечения ACID для пользовательского запроса. Вы не можете никак вмешаться в алгоритм работы транзакции. Максимум, что вам удастся - порулить блокировками - опять-таки через ващ запрос.

Кратко: Транзакция не может быть некорректной, некорректным может быть только запрос.


Sinix, Вы - про транзакции СУБД ("системные") , а expla - про "бизнес-транзакции":

Мартин Фаулер "Архитектура корпоративных программных приложений"

Команды, составляющие транзакцию, могут быть адресованы приложением
к СУБД (системные транзакции) или пользователем к приложению (бизнес-транзак-
ции)
...
Транзакция базы данных — это группа SQL-команд, обрамленная инструкциями начала и завершения.
..
Однако смысл системных транзакций остается скрытым для пользователей бизнес-
систем. Например, с точки зрения посетителя банковского Web-портала, транзакция
состоит из процедуры регистрации, выбора счета, задания суммы, определения вида опе-
рации и щелчка на кнопке ОК. Подобная последовательность действий называется
бизнес-транзакцией (business transaction) и должна обладать теми же свойствами ACID, что
и аналогичная системная транзакция. Если пользователь прерывает выполнение сцена-
рия до щелчка на кнопке ОК, любые изменения в состоянии системы подлежат безус-
ловной отмене; если транзакция завершается успешно, все ее промежуточные результаты
фиксируются на уровне системы только после щелчка на кнопке ОК.
Для поддержки свойств ACID бизнес-транзакции необходимо выполнить ее целиком
в рамках одной системной транзакции. К сожалению, бизнес-транзакция зачастую пре-
дусматривает обработку многих запросов, поэтому для ее реализации потребуется длин-
ная (long) системная транзакция. Но во многих случаях эффективность таких транзакций
оставляет желать лучшего.
...
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35724776
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Когда я говорил про транзакции, то имел в виду "Транзакция базы данных — это группа SQL-команд, обрамленная инструкциями начала и завершения".

2 Sinix , в твоей терминологии те же яйца только вид с боку - тоже запрос со свойствами ACID. Меняем запрос - меняем транзакцию.

2 АнатоЛой ,

что то Фаулер зарапортовался.

Бизнес транзакция не обязана 1:1 соотноситься с транзакцией БД. Если в бизнес транзакции выделить ряд целостных промежуточных состояний, то только переходы между этими состояниями придётся выполнять в рамках транзакции БД.
Так бизнес транзакция "заключение договора" не обязана выполняться в рамках одной транзакции БД, которая сосотоит из insert into ЗАКАЗЧИК, insert into ДОГОВОР и commit. Мы можем зарегистрировать заказчика - сделать insert into ЗАКАЗЧИК, commit, потом через некоторое время зарегистрировать договор - insert into ДОГОВОР и commit.
Понятно, что при таком подходе наличие в БД заказчика с которыми не заключен договор нужно считать нормальным явлением, и учитывать это обстоятельство в запросах.

Если угодно, можно время от времени выполнять сборку мусора, как это принято в современных средах, типа Java и C#.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35724898
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
expla
что то Фаулер зарапортовался.
Бизнес транзакция не обязана 1:1 соотноситься с транзакцией БД.


Про Фаулера сказть не могу: я же не всё цитировал - да и цитата из перевода, а не из оригинала.
Дальше по тексту видно, что речь именно о "бизнес транзакция не обязана 1:1 соотноситься с транзакцией БД" - у куча вариантов реализации...
Это просто при вырывании из большего контекста так грубо получилось, что

ФаулерДля поддержки свойств ACID бизнес-транзакции необходимо выполнить ее целиком
в рамках одной системной транзакции.

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

Про "нетривиальность" связи. Скажите, а ОО(Р)СУБД как-то иначе реализуют такие проверки? Уличная магия, да? :)

Для нашего случая там есть понятие подтипа. Положим есть абстрактный супертип A (лицо), и два его прямых подтипа B (физлицо) и C (юрлицо). Объект одновременно не может быть двух типов B (физлицо) и C (юрлицо). За этим следит ОРСУБД.

SinixСкажите, а как вы отслеживаете корректность данных? Своя логика в каждом запросе?

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

А по вашему, выходит. Приложение получает на вход какие то данные, обрабатывает (может быть падает или порождает неопределённый результат) и пытается сохранить в БД. Если у СУБД хватит ума проверить данные, то поднимется исключение, а обработка данных просто пройдёт впустую, если ума не хватит (в БД практически невозможно описать все инварианты системы, и тем более постусловия операций), или неопределённый результат случайно пройдёт проверку, то в БД поимеем кривые данные.

SinixЧто будет, если всего в одном запросе будет допущена ошибка в проверке ограничений?

Зачем глупые вопросы задавать? Как и при любой ошибке в программе - некорректный результат. Но не факт, что даже самые хитрые ограничения целостности БД поймают эту ошибку. Так что сосредоточтесь на разработке правильных транзакций.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35725161
vbgd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SinixПо порядку.

2 vbgd:
1) ранняя оптимизация зло.
2) изменение структуры данных ради оптимизации зло


1 Я не говорил РАННЯЯ оптимизация.
2 Зло - понятие субъективное. А еще есть обычные часы.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35726948
Sinix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для отдельных товарищей:

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

Нельзя запрос называть транзакцией. Во-первых вводите собеседника в заблуждение, во-вторых показываете отсутствие фундаментальных знаний. // последнее, пожалуйста, не воспринимайте на свой личный счёт, ладно? :)

2 expla
expla
Для нашего случая там есть понятие подтипа. Положим есть абстрактный супертип A (лицо), и два его прямых подтипа B (физлицо) и C (юрлицо). Объект одновременно не может быть двух типов B (физлицо) и C (юрлицо). За этим следит ОРСУБД.


Проверка наследования всё равно ведь будет. И я сомневаюсь, что она может быть реализована более эффективно, чем поиск по индексу.

expla
А как иначе? Приложение получает на вход какие то данные, проверяет их целостность, обрабатывает и сохраняет в БД целостные данные, которые естественно проходят все проверки. Выходит проверки на уровне СУБД избыточны, это не более чем assert.

А по вашему, выходит. Приложение получает на вход какие то данные, обрабатывает (может быть падает или порождает неопределённый результат) и пытается сохранить в БД. Если у СУБД хватит ума проверить данные, то поднимется исключение, а обработка данных просто пройдёт впустую, если ума не хватит (в БД практически невозможно описать все инварианты системы, и тем более постусловия операций), или неопределённый результат случайно пройдёт проверку, то в БД поимеем кривые данные.


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

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



Для особо одарённых...

1. Транзакция это не фича, а последовательность действий/запросов отвечающая требованиям ACID (есть ещё куча определений, в том числе и ваше, которые говорят о том же другими словами). Что бы не плодить понятия, транзакцией можно называть как формальный алгоритм (design time), если угодно "класс транзакций", так и фактическое действие (run time). Как правило из контекста понятно, о чём идёт речь.

2. Фича, это способность СУБД выполнять запросы транзакционно. Транзакционность действий ещё не гарантирует выполнение ACID. Неправильный уровень изоляции, кривой запрос или commit не на своём месте запросто могут поломать свойства ACID.

Sinix
Нельзя запрос называть транзакцией. Во-первых вводите собеседника в заблуждение, во-вторых показываете отсутствие фундаментальных знаний. // последнее, пожалуйста, не воспринимайте на свой личный счёт, ладно? :)


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

Ерунда. Абсолютно надёжных систем вообще не существует и не может сущетствовать. Достаточно надёжные системы, некоторые из них эксплуатируются до сих пор, создавались ещё до появления поддержки проверки ограничений целостности на уровне СУБД, до возникновения СУБД как класса ПО, и даже до возникновения ЭВМ.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35728201
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sinix
expla
Для нашего случая там есть понятие подтипа. Положим есть абстрактный супертип A (лицо), и два его прямых подтипа B (физлицо) и C (юрлицо). Объект одновременно не может быть двух типов B (физлицо) и C (юрлицо). За этим следит ОРСУБД.


Проверка наследования всё равно ведь будет. И я сомневаюсь, что она может быть реализована более эффективно, чем поиск по индексу.



Не сомневайся, потому что и без проверки можно обойтись. Точнее проверку можно выполнить ещё на этапе компиляции запроса, проконтролировать типы и т.п.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35744494
Фотография Папа Игорь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp ... SexID ...

Посмеялся отдуши. Спасибо.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35744501
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
expla Так что сосредоточтесь на разработке правильных транзакций.
+1
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35744508
Фотография Папа Игорь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Папа Игорьsp ... SexID ...

Посмеялся отдуши. Спасибо.

Вдогонку.

Таблица Sex будет иметь ровно четыре записи со значениями:

"Ме", "Жо", "Ме и Жо", "Ни Ме, ни Жо".
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35748676
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Папа ИгорьПапа Игорьsp ... SexID ...

Посмеялся отдуши. Спасибо.

Вдогонку.

Таблица Sex будет иметь ровно четыре записи со значениями:

"Ме", "Жо", "Ме и Жо", "Ни Ме, ни Жо".

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

Здравствуйте!

Выражаю сомнение в том, что Ваш проект выйдет за пределы родного государства.

Судя по старту.

В любом случае - успехов! (без иронии)
...
Рейтинг: 0 / 0
111 сообщений из 111, показаны все 5 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Донормализовывался - караул!!! )
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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