Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.13;
Скачать: CL | DM;

Вниз

Одна "сущность" не вписывается в рамки БД!   Найти похожие ветки 

 
31512 ©   (2004-05-24 11:01) [0]

Описание проблемы:
Есть в миру организации, которые могут вступать в некие отношения. Например, "Организация А" может выступать поставщиком чего-либо для ряда других организация. "Организация Б" может являться потребителем чего-либо от множества других организаций. В свою очередь возможно, что "Организация Б" является поставщиком для "Организации А" в одном случае, и потребителем в другом. Дабы отобразить эти отношения я создал в БД следующие таблицы:

1. Эта таблица представляет справочник организаций, хранящий их атрибуты. Они общие для всех организаций.

create table [ORGANISATION](
ID_ORGANISATION int not null primary key,
ORGANISATION_NAME nvarchar (255) collate Cyrillic_General_CI_AS not null default "Нет данных",
ORGANISATION_ADRESS nvarchar (255) collate Cyrillic_General_CI_AS not null default "Нет данных",
ORGANISATION_CODE nvarchar (255) collate Cyrillic_General_CI_AS not null default "Нет данных",
.
.
.
и т.д.
)


2. Эта таблица есть справочник типов отношений, могущих возникать между организациями

create table [CONTRAGENTS_TYPE](
ID_CONTRAGENT_TYPE int not null primary key,
CONTRAGENT_TYPE nvarchar (255) collate Cyrillic_General_CI_AS not null default "Неопределено",
)


3. Ну и, собственно, таблица, устанавливающая эти отношения

create table [CONTRAGENTS](
ID_ORGANISATION1 int not null foreign key references [ORGANISATION](ID_ORGANISATION) on delete no action,
ID_ORGANISATION2 int not null foreign key references [ORGANISATION](ID_ORGANISATION) on delete cascade,
ID_CONTRAGENT_TYPE int not null foreign key references [CONTRAGENTS_TYPE](ID_CONTRAGENT_TYPE) on delete cascade
)

Считать надо так: Для ID_ORGANISATION1 - ID_ORGANISATION2 является ID_CONTRAGENT_TYPE.

Но есть одна загвоздка. В отношения может вступать "Население", которое организацией ну ни как не назовёшь. Оно не может быть поставщиком, а может быть только потребителем.

Вопрос.
Как впихнуть его в такую схему? Или может схема принципиально неверна?


 
paul_k ©   (2004-05-24 11:09) [1]

А чем физик (или бешеный физик под названием ПБЮЛ) не укладывается в эту схему?
схема вроде проста
лицо --> связь --> классификатор
Осталось, в зависимости от типа лица, ограничить выбор возможных классификаторов, для того, что-бы наш "любимый умный и очень внимательный" пользователь имел как можно меньше шансов ввести полный бред


 
Sergey13 ©   (2004-05-24 11:14) [2]

А зачем фиксировать "отношения"? Может имеет смысл определять эти отношения в докаментах, которые отношения порождают. Есть "Договор", в нем поставщик такой то, потребитель такой то. Для другого договора может быть наоборот.
А население... Хоть горшком назови, только в печку не ставь. 8-) Можно и в одну таблу с признаком, можно и в отдельную. Я бы сделал в одной скорее всего.


 
bushmen ©   (2004-05-24 11:14) [3]

Ну и что, что население не является организацией!
В справочнике организаций заводишь еще одно поле - признак населения. И в момент формирования отношений смотришь, что если значение этого поля 1, то программно блокируешь возможность добавления его как поставщика


 
31512 ©   (2004-05-24 11:21) [4]


> paul_k ©   (24.05.04 11:09) [1]

Не уверен что полностью тебя понял. Поясни, пожалуйста.
Классификатор это, например, "организация"/"не организация"?


 
XYZ   (2004-05-24 11:23) [5]

Ну да, одна таблица - Контрагенты. А в ней и ФЛ, и ЮЛ (с признаком - Ю/Ф), +можно 2 дополнительные табл. атрибутов создать - для юр.лиц одно, для физ.лиц другое.


 
31512 ©   (2004-05-24 11:25) [6]


> Sergey13 ©   (24.05.04 11:14) [2]

Не годится. Документов нет.


> bushmen ©   (24.05.04 11:14) [3]

Интересно. Анализирую твоё предложение.


 
Sergey13 ©   (2004-05-24 11:30) [7]

2 31512 ©   (24.05.04 11:25) [6]
>Не годится. Документов нет.
Отношения без документов называют еще сожительством физиков с лириками. 8-)


 
31512 ©   (2004-05-24 11:33) [8]

А такое решение:

Добавить булевское поле, такое, что
true - население является потребителеи этой организации
false - население не является потребителеи этой организации.


 
31512 ©   (2004-05-24 11:42) [9]


> Sergey13 ©   (24.05.04 11:30) [7]

У тебя есть документ, свидетельствующий, что ты являешься потребителем электроэнергии. Между тем ты  - население.


 
bushmen ©   (2004-05-24 11:49) [10]

>Добавить булевское поле, такое, что
>true - население является потребителеи этой организации
>false - население не является потребителеи этой организации

В принципе, хрен редьки не слаще. Просто может возникнуть ситуация, когда надо будет отделять Юридических лиц от ПБОЮЛ. Мне кажется уж лучше использовать тип byte


 
Sergey13 ©   (2004-05-24 11:52) [11]

2 31512 ©   (24.05.04 11:42) [9]
>У тебя есть документ, свидетельствующий, что ты являешься потребителем электроэнергии.
А как же? Квиток каждый месяц присылают, я по нему и плачУ.

>Между тем ты  - население.
Я народ!!! 8-)


 
bushmen ©   (2004-05-24 11:57) [12]

В смысле tinyint :)))


 
paul_k ©   (2004-05-24 11:58) [13]


> 31512 ©   (24.05.04 11:21) [4]

Лицо - справочник
Взаимоотношения - тип классификатора
потребитель
поставщик
партнер
......
 - Значения типа классификатора
Тип лица связан с типом (типами ) классификатора через таблицу


 
31512 ©   (2004-05-24 12:02) [14]


> Sergey13 ©   (24.05.04 11:52) [11]

Так вот. Открую тебе страшную тайну! На самом деле  - потребителем элктроэнергии является твоя квартира, или точнее жилплощадь. Поэтому платит за это тот, кто там проживает. Вот, например, ты уехал на дачу. А к тебе пришёл дядя Вася и давай гнать самогон на бесконечно любимой тобой, твоей же, электроплите. И нажёг он, скажем, 800 кВт*ч. А платить будешь ты, поскольку счётик прикреплён к твоей квартире, его серийный номер записан в Энергосбыте и проживаешь в не ты - на основании регистрации (ранее прописки). Именно поэтому при переезде меняют только прописку и не заключают никакие договора с ЖКХ.


 
paul_k ©   (2004-05-24 12:05) [15]


> 31512 ©   (24.05.04 11:21) [4]

Лицо - справочник
Взаимоотношения - тип классификатора
потребитель
поставщик
партнер
......
 - Значения типа классификатора
Тип лица связан с типом (типами ) классификатора через таблицу

PersonId
ContragentId
KlassTypeId
KlassValueId


 
31512 ©   (2004-05-24 12:11) [16]


> paul_k ©   (24.05.04 11:58) [13]

Тут у меня ещё одна мысль созрела.
Может завести на население отдельную таблицу?
Ведь всегда ясно, что население - потребитель.
Например так:

create table [PEOPLE](
ID_ORGANISATION int not null foreign key references [ORGANISATION](ID_ORGANISATION) on delete cascade,
VALUE float null,
DESCRITION nvarchar (255) null
)


И читать можно так: Население потребляет VALUE чего-либо у ID_ORGANISATION.
Разумеется таблицу надо расширить...


 
paul_k ©   (2004-05-24 12:22) [17]

Вариант , по моему, неверный.
ПБЮЛ у тебя - это физик или юрик?
Физик (как ты выражаешся население) может участвавать в действиях из перечня-1
Юрик (организация) в действиях из перечня-2
Перечень-1 является подмножеством перечня-2
Следовательно, по моему мнению, Физики и Юрики должны составлять единое множество.
то есть должен существовать список в котором присутствуют и те и другие. Как это организовывать - личное дело каждого программиста.
Мне понравилась реализация, при которой существует таблица с относительно общими параметрами для всех типов лиц (Физ.,Юр.. и пока все) и связь с таблицами данных для каждого из них.


 
paul_k ©   (2004-05-24 12:25) [18]

Кстати, вопрос взаимоотношений и их учета сильно зависит от задачи. Уж не очередную CRM ли пишешь?


 
Сергей Суровцев ©   (2004-05-24 12:40) [19]

Подход всегда стандартный - таблица контрагентом ЛЮБЫХ, туда и население, и организации и все что угодно, только желательно признаки выставлять. И таблица взаимоотношений - кто кому чего и сколько. По одной строке на операцию. Из такой схемы ты всегда быстро и точно выжмешь конечный остаток на любую точку периода. И вести ее - одно удовольствие. (А не вести - другое :)) ).


 
31512 ©   (2004-05-24 12:47) [20]


> paul_k ©

Может  и CRM, не знаю. Пока не решил.
Население - не совсем физическое лицо. Точнее совсем не физическое лицо. Чтобы окончательно всё запутать скажу, что это "группа потребителей", для которой отдельно устанавливаются определённые правила.
Итак, что требуется:
1. Население заносить в эти отношения как любую другую организацию.
2. Население не может быть производителем или поставщиком. Только потребителем.
3. У населения не может быть атрибутов организации (Юр. адрес, код ОКПО и пр.)

Вот я и пытаюсь уяснить твою схему.


 
31512 ©   (2004-05-24 13:00) [21]


> Сергей Суровцев ©   (24.05.04 12:40) [19]

 На сей момент так оно и есть. НО! Неприятность в том, что аеселение в такой схеме может запросто продать кому-нибудь электроэнергию. Такое недопустимо. + Население может войти во все прочие взаимоотношения, даже стать Базовым поставщиком для некой организации.
 Сразу оговорюсь, что имею дело с аудитом, а не с бухучётом. И таких "невписываемых" объектов там полно.


 
paul_k ©   (2004-05-24 13:01) [22]

Чем "население" отличается от "организации" (по структуре данных)
1. - несколькими модификаторами . остальное у них, IMHO, общее.
2. - ТИПОМ!!!!
Простейшее и описанное выше -
В зависимости от ТИПА лица используем разные ТИПЫ классификаторов, описанные выше
Кстати, является лицо "населением" или "организацией"  - тоже классификатор типа "Типы лиц" и так далее....


 
31512 ©   (2004-05-24 13:01) [23]


> Сергей Суровцев ©   (24.05.04 12:40) [19]

 На сей момент так оно и есть. НО! Неприятность в том, что население в такой схеме может запросто продать кому-нибудь электроэнергию. Такое недопустимо. + Население может войти во все прочие взаимоотношения, даже стать базовым поставщиком для некой организации.
 Сразу оговорюсь, что имею дело с аудитом, а не с бухучётом. И таких "невписываемых" объектов там полно.


 
paul_k ©   (2004-05-24 13:05) [24]


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

А по сопатке тому, кто такой бред ввел, вплоть до увольнения, чтоб неповадно остальным было


 
bushmen ©   (2004-05-24 13:49) [25]

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

А ты как программист на что? В логике программы и учитывай это по признвку!


 
Сергей Суровцев ©   (2004-05-24 22:10) [26]

>31512 ©   (24.05.04 13:00) [21]
>На сей момент так оно и есть. НО! Неприятность в том, что >аеселение в такой схеме может запросто продать кому-нибудь >электроэнергию. Такое недопустимо.

Это хорошо, что так и есть. Значит дело за малым - сделать признак "покупатель, продавец, провец-покупатель", последний по вкусу и выставить запрет операции на продажу если контрагент - покупатель прямо на уровне интерфейса. Снимешь сразу и свою головную боль, и оператора. Да и к базе обращений меньше будет.
А от того аудит это или бухучёт ничего не меняется. Подход общий.


 
Sergey13 ©   (2004-05-25 08:30) [27]

2 31512 ©   (24.05.04 12:02) [14]
>Так вот. Открую тебе страшную тайну! На самом деле  - потребителем элктроэнергии является твоя квартира
Открой мне еще одну тайну. Как я плачу за электроэнергию? Может кидаю деньги с балкона на ветер, который уже сам донесет их до поставщика. Или все таки иду в кассу и заполняю некий документ на оплату за услугу?
Ты, ИМХО, слегка зациклился на населении и отсутствии у него "формального" договора (кстати, наличие счетчика - уже договор, хотя может и не формальный). А между организациями - тоже нет документов? Или не завод платит, а владец юридического адреса предприятия - так что ли? А как будут отражаться возможные трехсторонние отношения, когда мы им железо, они кому то гвозди, а уж те нам энергию? А бартерные договоры? Нет, без "Документа" в "отношениях" трудно, да и не стоит, ИМХО, шкурка выделки.



Страницы: 1 вся ветка

Текущий архив: 2004.06.13;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.037 c
6-1082888713
Khvalera
2004-04-25 14:25
2004.06.13
NMStrmServ и NMStrm


1-1086162527
Николя
2004-06-02 11:48
2004.06.13
Отладчик


1-1085834461
SergeyM
2004-05-29 16:41
2004.06.13
Integer и PlargeInteger


14-1085659720
Вячеслав
2004-05-27 16:08
2004.06.13
Delphi+Autocad


14-1085838902
Guddini
2004-05-29 17:55
2004.06.13
Подскажите, как найти все файлы в папке с заданной маской?