powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Создание таблицы контрагентов
59 сообщений из 59, показаны все 3 страниц
Создание таблицы контрагентов
    #36443010
blest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть сущность контрагент - есилф физлицо, то нужно вносить Фамилию, Имя, Отчество - 3 поля. Если юрлицо, то 1 поле - название контрагента. Можно сделать одной таблицей, с четырмя полями. В первом случае будет заполняться одно поле, во втором другие 3 поля. Насколько это правильно и стоит ли так делать?
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36443539
Toshik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В таком случае разбивают на три таблицы.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36443561
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А есть еще ИНН, как бы общий, но разной длины и у физлиц необязательный, а у юр - обязательный (в РФ).
С уважением, Naf
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36444202
blest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. я так понимаю основная таблица - контрагенты, содержащая внешний ключ на таблицу физ.лицо и вн.ключ на таблица юр.лицо?
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36444216
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blestТ.е. я так понимаю основная таблица - контрагенты, содержащая внешний ключ на таблицу физ.лицо и вн.ключ на таблица юр.лицо? у них внешние ключи могут совпадать с примарными
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36444509
И направлены в другую сторону - к контрагенту
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36444641
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blestНасколько это правильно и стоит ли так делать?

Это неправильно концептуально. В информационной модели так делать не следует. В противном случае вам придётся написать объёмный комментарий к такой сущности.

Если речь идёт о реализации, то оракл именно так и поступает, но внутри себя. На уровне SQL запросов пользователь получает из таблицы объекты разных типов, с разным набором полей. Но впринципе это сокрытие несущественно. Реализация не сложная и достаточно "прозрачная" для пользователей БД. Можно и без объектной надстройки обойтись.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36445340
blest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
------------------------И направлены в другую сторону - к контрагенту

А ну да, как раз таблицы юр.лицо и физ.лицо должны ссылать на контрагенты.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36445565
Toshik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blest[quot ------------------------]И направлены в другую сторону - к контрагенту

А ну да, как раз таблицы юр.лицо и физ.лицо должны ссылать на контрагенты.[/quot

ага
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36446235
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NafА есть еще ИНН, как бы общий, но разной длины и у физлиц необязательный, а у юр - обязательный (в РФ).
С уважением, Naf

а еще бывают такие неуникальные случаи изменения ИНН и бывают их кучи одинаковых!!! )))
в украине все возможно ))))
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36458238
blest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Toshikblest[quot ------------------------]И направлены в другую сторону - к контрагенту

А ну да, как раз таблицы юр.лицо и физ.лицо должны ссылать на контрагенты.[/quot

ага

Еще один момент. Таблицы будут такого вида:

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

table Физ_Лица (
   ID Контрагента, (pk)
   <атрибуты Физ_Лицо>
);

table ЮР_Лица (
   ID Контрагента, (pk)
   <атрибуты ЮР_Лицо>
);

Но как будет гарантироваться целостность БД? Контрагент может быть или Юр.лицом или Физ.лицом. Но по такой схеме в таблицах Юр.лица и Физ.лица айдишники контрагентов могут совпадать. Что делать?
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36458340
Считать их предпринимателями без образования юридического лица :)

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

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

А какими еще средствами тогда можно еще пользоваться?
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36458695
carper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blest,

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

Вообще соотношений типа (1:1) OR (1:1) лучше избегать.

Но дело ваше.

Попробуйте сделать так (псевдокод, проверять некогда)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
  "Главная таблица"
  create table contractors(ID NUMBER,  TYPE_C  CHAR( 1 )  not null
      constraint CKC_TYPE check (TYPE_C in ('0','1')), ...

  На этой таблице создаем PK на ID + TYPE_C

  "Юрики"
   create table c_lawyer(ID_CONTRACTORS NUMBER,  TYPE_C       CHAR( 1 )  not null
      constraint CKC_TYPE check (TYPE_C in ('0')), ...

  На этой таблице создаем FK на ID_CONTRACTORS + TYPE_C


   "Физики"
   create table c_private(ID_CONTRACTORS NUMBER,  TYPE_C       CHAR( 1 )  not null
      constraint CKC_TYPE check (TYPE_C in ('1')), ...
    
    На этой таблице также создаем FK на ID_CONTRACTORS + TYPE_C

Теперь вы никак не сможете вставить запись из contractors с одним же и тем же ID + TYPE_C сразу в разные таблицы, за этим проследит поле TYPE_C, точнее constraints в подчиненных таблицах.

Минус в том, что constraints можно отключать, но и FK тоже можно удалять. :)

В принципе можно изощряться в этом направлении сколько душе угодно, например, генерировать значения последовательности для ID первичной таблицы из двух разных диапазонов (в зависимости от типа контрагента) и вставить в constraints подчиненных таблиц проверку на эти диапазоны, тогда не понадобится составной ключ, ну и т.д и т.п.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36458706
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blestToshikblest[quot ------------------------]И направлены в другую сторону - к контрагенту

А ну да, как раз таблицы юр.лицо и физ.лицо должны ссылать на контрагенты.[/quot

ага

Еще один момент. Таблицы будут такого вида:

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

table Физ_Лица (
   ID Контрагента, (pk)
   <атрибуты Физ_Лицо>
);

table ЮР_Лица (
   ID Контрагента, (pk)
   <атрибуты ЮР_Лицо>
);

Но как будет гарантироваться целостность БД? Контрагент может быть или Юр.лицом или Физ.лицом. Но по такой схеме в таблицах Юр.лица и Физ.лица айдишники контрагентов могут совпадать. Что делать?

генерировать ID только в table Контрагенты сначала и вставлять в соответствующие таблицы Физ_Лица и ЮР_Лица
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36458756
blest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spblestToshikblest[quot ------------------------]И направлены в другую сторону - к контрагенту

А ну да, как раз таблицы юр.лицо и физ.лицо должны ссылать на контрагенты.[/quot

ага

Еще один момент. Таблицы будут такого вида:

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

table Физ_Лица (
   ID Контрагента, (pk)
   <атрибуты Физ_Лицо>
);

table ЮР_Лица (
   ID Контрагента, (pk)
   <атрибуты ЮР_Лицо>
);

Но как будет гарантироваться целостность БД? Контрагент может быть или Юр.лицом или Физ.лицом. Но по такой схеме в таблицах Юр.лица и Физ.лица айдишники контрагентов могут совпадать. Что делать?

генерировать ID только в table Контрагенты сначала и вставлять в соответствующие таблицы Физ_Лица и ЮР_Лица

Ну я так и собирался делать в процедуре по добавлению контрагентов, но это ведь не гарантирует, что другой программист взяв эти таблицы не напихает в Юр.лица и Физ.лица одинаковые айдишники
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36458775
Фотография proposed amendment
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blestно это ведь не гарантирует, что другой программист взяв эти таблицы не напихает в Юр.лица и Физ.лица одинаковые айдишники

а что страшного случится если напихает? ты же не собираешься их использовать без базового ENTRY_ID?

никого не пугает что в таблицах PRODUCTS и DOCUMENTS могут быть одинаковые <RECORD>_ID а вот одинаковые ENTITY_ID и IDENTITY_ID беспокоят

почему?
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36458778
blest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
carperblest,

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

Вообще соотношений типа (1:1) OR (1:1) лучше избегать.

Но дело ваше.

Попробуйте сделать так (псевдокод, проверять некогда)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
  "Главная таблица"
  create table contractors(ID NUMBER,  TYPE_C  CHAR( 1 )  not null
      constraint CKC_TYPE check (TYPE_C in ('0','1')), ...

  На этой таблице создаем PK на ID + TYPE_C

  "Юрики"
   create table c_lawyer(ID_CONTRACTORS NUMBER,  TYPE_C       CHAR( 1 )  not null
      constraint CKC_TYPE check (TYPE_C in ('0')), ...

  На этой таблице создаем FK на ID_CONTRACTORS + TYPE_C


   "Физики"
   create table c_private(ID_CONTRACTORS NUMBER,  TYPE_C       CHAR( 1 )  not null
      constraint CKC_TYPE check (TYPE_C in ('1')), ...
    
    На этой таблице также создаем FK на ID_CONTRACTORS + TYPE_C

Теперь вы никак не сможете вставить запись из contractors с одним же и тем же ID + TYPE_C сразу в разные таблицы, за этим проследит поле TYPE_C, точнее constraints в подчиненных таблицах.

Минус в том, что constraints можно отключать, но и FK тоже можно удалять. :)

В принципе можно изощряться в этом направлении сколько душе угодно, например, генерировать значения последовательности для ID первичной таблицы из двух разных диапазонов (в зависимости от типа контрагента) и вставить в constraints подчиненных таблиц проверку на эти диапазоны, тогда не понадобится составной ключ, ну и т.д и т.п.

Ну да, это есть вариант.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36462010
blestЕсть сущность контрагент - есилф физлицо, то нужно вносить Фамилию, Имя, Отчество - 3 поля. Если юрлицо, то 1 поле - название контрагента. Можно сделать одной таблицей, с четырмя полями. В первом случае будет заполняться одно поле, во втором другие 3 поля. Насколько это правильно и стоит ли так делать?

Есть 3 классических варианта решения вопроса:

1) 1 таблица (супертаблица): Контрагенты
Достоинства: простота в понимании
Недостатки: несколько пониженная надежность (проблема сделать так чтобы ООО "Рога и копыта" не стало директором ОАО "МММ")

2) 2 таблицы: Юрики и Физики. Вариант тупой ибо ссылочная целостность не реализуема вообще. Рассматривать не будем ибо юзать этот вариант не профессионально. )))

3) 3 таблицы: Контрагенты (содержащие общие для физиков и юриков поля), Юрики и Физики содержащие специфические поля.
Достоинства: надежность и правильность с точки зрения теории
Недостатки: несколько большая сложность в реализации по сравнению с в.1

P.S. Я когда-то у Алекса Усова из ru.delphi.db спросил примерно тоже самое.... году эдак в 1997-1998. )))
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36462536
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Алексей Статюха

К контрагенту должен прилагаться набор некоторых реквизитов (сколь угодно разных).
Какая проблема разделить реквизиты на:
1. Для всех.
2. Для Юр.
3. Для Физ.
и т.д.

??

Решение: Таблица контрагентов, таблица реквизитов, таблица настроек.

Разновидностей контрагентов может быть гораздо больше, чем Юр и Физ. Зависит от задачи.

ЗЫ: Отдельные таблицы для Физ. и Юр. - идиотство. Тоже самое для Поставщик-Покупатель.

Точка. Дальше можно не обсуждать.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36463275
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSV2 Алексей Статюха

К контрагенту должен прилагаться набор некоторых реквизитов (сколь угодно разных).
Какая проблема разделить реквизиты на:
1. Для всех.
2. Для Юр.
3. Для Физ.
и т.д.

??

Решение: Таблица контрагентов, таблица реквизитов, таблица настроек.

Разновидностей контрагентов может быть гораздо больше, чем Юр и Физ. Зависит от задачи.

ЗЫ: Отдельные таблицы для Физ. и Юр. - идиотство. Тоже самое для Поставщик-Покупатель.

Точка. Дальше можно не обсуждать.

Тоесть по-Вашему это верно когда есть расплывчатое поле Название которое в одной этой таблице и название Юрика и если че - ФИО ????? !!!
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36463549
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spТоесть по-Вашему это верно когда есть расплывчатое поле Название которое в одной этой таблице и название Юрика и если че - ФИО ????? !!!По моему подобный вопрос нужно формулировать точнее. :)
Совпадение ФИО и названия для Физ. - тавтология. Ничего не поделаешь.
Но ничего страшного тут не вижу.
Предлагаете для этого завести отдельную таблицу ? А еще для 20..50 других свойств ?
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36463601
Silverlight
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LSVspТоесть по-Вашему это верно когда есть расплывчатое поле Название которое в одной этой таблице и название Юрика и если че - ФИО ????? !!!По моему подобный вопрос нужно формулировать точнее. :)
Совпадение ФИО и названия для Физ. - тавтология. Ничего не поделаешь.
Но ничего страшного тут не вижу.
Предлагаете для этого завести отдельную таблицу ? А еще для 20..50 других свойств ?
И дать этой таблице название Dustbin(мусорное ведро)
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36463823
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSV
Совпадение ФИО и названия для Физ. - тавтология. Ничего не поделаешь.

это не тавтология, это недопонимание различия между понятиями "данные" и "информация", или физической и логической моделью. Данные - это 250 символов, а информация - в одном случае ФИО человека, в другом - наименование компании. Вы правы, ничего сверхестественного.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36464242
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Статюха3) 3 таблицы: Контрагенты (содержащие общие для физиков и юриков поля), Юрики и Физики содержащие специфические поля.
Достоинства: надежность и правильность с точки зрения теории
Недостатки: несколько большая сложность в реализации по сравнению с в.1А если к общей таблице прилепить ссылки на специфические таблицы и ограничение что заполнена (not null) может быть только одна ссылка, то мы вернемся к варианту 1 в виде вьюхи.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36464457
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
этот вопрос вроде как плодотворно обсудили здесь
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36465082
carper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уТКаэтот вопрос вроде как плодотворно обсудили здесь

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

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

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

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

Соответственно, если мы ведем две отдельные таблицы для контрагентов юриков и физиков получается, что вполне ДОПУСТИМО существование в обоих таблицах ID одного и того же контрагента (разруливать кем он является сейчас, и кем и когда являлся ранее, можно через промежуточную темпоральную таблицу)!

Более того, никто не мешает тому же Василию благополучно разориться как ООО и стать снова Василием, а потом опять стать юриком, но уже "ЗАО "Эх ухнем"".

Т.е. получается, что в обоих таблицах реквизитов возникнет необходимость иметь по несколько записей для контрагента с одинаковым ID (т.е. АК надо стоить по ID контрагента и ID из промежуточной темпоральной таблице)!

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

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

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

Разумеется, если мы чего не учли, например, возможность вышеупомянутого сотрудничества с иностранцами, никуда мы не денемся от дописывания бизнес-правил и добавления полей в таблицу реквизитов, но это может оказаться проще, чем вариант создания доп. таблиц с практическим дублированием ряда бизнес-правил по реально совпадающим по смыслу полям.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36465719
blest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmLSV
Совпадение ФИО и названия для Физ. - тавтология. Ничего не поделаешь.

это не тавтология, это недопонимание различия между понятиями "данные" и "информация", или физической и логической моделью. Данные - это 250 символов, а информация - в одном случае ФИО человека, в другом - наименование компании. Вы правы, ничего сверхестественного.

Хорошо, для Физ.лица название ФИО (строго в таком порядке). Если сделать в базе Название Юр/Физ лица одним полем, то кому доверить проверку на правильность ввода - интерфейсу(будет 3 поля - Фамиллия Имя Отчетсво) ?? Я считатал всегда, что целостность данных должна обеспечивать сама БД.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36465991
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blest,

база данных только хранит сведения как есть. Целостность данных проверяет СУБД , а обеспечивает эту целостность в первую очередь пользователь, а затем приложение. Сначала проверку данных осуществляет пользователь, потом приложение и наконец СУБД. Если кто то в этой цепочке косячит, а следующий не имеет адекватной проверки, то и в БД сведения будут кривыми.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36466058
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blestХорошо, для Физ.лица название ФИО (строго в таком порядке). Если сделать в базе Название Юр/Физ лица одним полем, то кому доверить проверку на правильность ввода - интерфейсу(будет 3 поля - Фамиллия Имя Отчетсво)

1. нет нужды писать разные данные в одно поле. В Оракле пустые поля почти не занимают места. В других структурах данных могут быть конструкции типа C'шного union или ASN'овского CHOICE. XML опять же поддерживает вариативность атрибутов...
2. Для проверки на уровне СУБД несложно сделать декларативное ограничение целостности. Т.е. в зависимости от формы собственности (частное лицо, ЧП, организация и т.п.) можно требовать заполнение одних полей и незаполнение других.
3. качество данных в первую очередь определяет не их проверка в момент изменения, а их использование. Ненужные данные рано или поздно потеряют актуальность. Ошибки в нужных данных обычно достаточно быстро выявляются когда их начинают использовать в отчётах, вычислениях, и т.п. В системе должен быть предусмотрен механизм отрицательной обратной связи по ошибкам данных.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36467016
Не ORM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Единственная таблица - бредовое решение во всех отношениях. Точка.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36467276
blest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не ORMЕдинственная таблица - бредовое решение во всех отношениях. Точка.

Нет, ну если честно, то в единой таблице с есть решиние имхо. При регистрации Фирмы или ИП регистрациоонная форма ОДНА. Но мой вопрос по-породу ФИО остается актуальным. И может быть есть и другие пункты.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36467378
Не ORM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет там никакого решения, а один только мало внятный бардак ради весьма сомнительной экономии на лишнем Join. Для любителей произодительности - две таблицы с уникальными Id.
Самодокументируемость схемы, отсутствие лишних индексов, меньше длина строки, проще проверки, возможность применения кодогенераторов\ORM для построения клиентской части и тд.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36469060
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blestНет, ну если честно, то в единой таблице с есть решиние имхо. При регистрации Фирмы или ИП регистрациоонная форма ОДНА. Но мой вопрос по-породу ФИО остается актуальным. И может быть есть и другие пункты.
Одна сущность - одна таблица+подчиненные (если есть). Формы редактирования разные - зависит от типа сущности и, возможно, от других причин.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36469730
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blestНо мой вопрос по-породу ФИО остается актуальным. И может быть есть и другие пункты.

Давайте обратимся к гигантам индустрии.
Смотрим объектную СУБД оракл. Как в ней можно реализовать твою схему?...

Создаём тип Контрагент,
Создаём подтип Физ_лицо от Контрагент
Создаём подтип Юр_лицо от Контрагент

Можно создать таблицы из Физ_лицо и Юр_лицо. Впринципе неплохо, но тогда тип Контрагент не сильно помогает нам. Так например нам нужно знать в ккой таблице хранятся контрагенты каждого типа, вместо того, чтобы просто сохранять их в одной таблице. Висячие ссылки не запретишь. И т.п.

Можно создать таблицу из Контрагент. Теперь там, где Контрагенты не подразделяются на Физ и Юр, мы можем оперировать обобщённым понятием. Что касается хранения атрибутов, то оракл в недрах БД создаст таблицу в которой просто перечислит все поля сначала из Контрагент, потом из Физ_лицо и наконец из Юр_лицо (точнее, порядок тут не важен).

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

_модОдна сущность - одна таблица+подчиненные (если есть). Формы редактирования разные - зависит от типа сущности и, возможно, от других причин.

Слабось ER моделирования в том, что нет строгого определения сущности. Используя разные подходы, мы можем получать разный набор сущностей и соответсвующих таблиц.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36472392
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVОтдельные таблицы для Физ. и Юр. - идиотство. Тоже самое для Поставщик-Покупатель.
+500. Когда уже прекратится это обсуждение раз и навсегда?
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36472412
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabДавайте обратимся к гигантам индустрии
Хотите их всуе упомянуть? Что ж. В SAP дебиторы отдельно от кредиторов...
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36472415
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blestНо мой вопрос по-породу ФИО остается актуальным
Какой именно вопрос?
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36472550
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВаскецовmcureenabДавайте обратимся к гигантам индустрииХотите их всуе упомянуть? Что ж. В SAP дебиторы отдельно от кредиторов...В Navision отдельно.
Гиганты индустрии - не показатель. Там полно мегакосяков. И это один из них. Видимо он пришел по наследству с незапамятных DOS-времён, когда для простоты управления и безопасности лепили две таблицы, а SQL в помине не было.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36473167
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mcureenab
Слабось ER моделирования в том, что нет строгого определения сущности.
А его в принципе нет. Выбор сущностей - это момент проектирования. В данном случае я бы выбрал одну сущность - контрагент.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36473441
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВаскецовLSVОтдельные таблицы для Физ. и Юр. - идиотство. Тоже самое для Поставщик-Покупатель.
+500. Когда уже прекратится это обсуждение раз и навсегда?

Прекращаем.

blestЕсть сущность контрагент - есилф физлицо, то нужно вносить Фамилию, Имя, Отчество - 3 поля. Если юрлицо, то 1 поле - название контрагента. Можно сделать одной таблицей, с четырмя полями. В первом случае будет заполняться одно поле, во втором другие 3 поля. Насколько это правильно и стоит ли так делать?

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

Вероятно введение абстрактной сущности Контрагент связано с желанием исключить из модели множетсвенные связи некоторых сущностей с разными типами контрагентов. Но во первых таких связей может и не быть на самом деле (зачастую проектировщики пытаются хранить в БД временные связи, которые возникают и пропадают только в процессе выполнения некоторых операций), во вторых переходя к физической модели БД мы можем реализовать их разными способами, в частности через таблицу связей. Наконец сама сущность Контрагент во всех её проявлениях может быть плодом фантазии проектировщика (например, из сущности Контракт зачемто выносят в отдельную сущность атрибуты сторон, создавая в БД лишние сущности и связи, тогда как можно было обойтись представлением БД из тех же Контрактов, Заказов, Контактов и т.п.).
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36474954
blest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВаскецовblestНо мой вопрос по-породу ФИО остается актуальным
Какой именно вопрос?

Хорошо, для Физ.лица название ФИО (строго в таком порядке). Если сделать в базе Название Юр/Физ лица одним полем, то кому доверить проверку на правильность ввода - интерфейсу(будет 3 поля - Фамиллия Имя Отчетсво) ?? Я считатал всегда, что целостность данных должна обеспечивать сама БД.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36475191
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blestХорошо, для Физ.лица название ФИО (строго в таком порядке). Если сделать в базе Название Юр/Физ лица одним полем, то кому доверить проверку на правильность ввода - интерфейсу(будет 3 поля - Фамиллия Имя Отчетсво) ?? Я считатал всегда, что целостность данных должна обеспечивать сама БД.
целостность данных <> правилам ввода. Богу богово, кесарю кесарево. База проверяет целостность, правила ввода проверяет интерфейс, всё логично.
ЗЫ замечание безотносительно основной обсуждаемой темы
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36475468
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blest
Это вопрос типа "сколько полей сделать под ФИО"?

blestЕсли сделать в базе Название Юр/Физ лица одним полем
Что значит "если"?
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36475812
blest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецовblest
Это вопрос типа "сколько полей сделать под ФИО"?

blestЕсли сделать в базе Название Юр/Физ лица одним полем
Что значит "если"?

Это значит, что при другом варианте можно сделать 3 поля, и в другой таблице.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36475819
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blestЭто значит, что при другом варианте можно сделать 3 поля, и в другой таблице.
И в чем проблема? Вам необходимо отдельно иметь имя, фамилию?
Или достаточно просто иметь некое наименование, например, для отчета "Список должников бабла"?
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36476924
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У нас абстрактная сущность Контрагент существует не абстрактно - в договоре Поле Контрагент используется очень активно при этом не не надо мучаться как в это поле запихнуть Физика или Юрика
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36476996
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВаскецовblestЭто значит, что при другом варианте можно сделать 3 поля, и в другой таблице.
И в чем проблема? Вам необходимо отдельно иметь имя, фамилию?
Или достаточно просто иметь некое наименование, например, для отчета "Список должников бабла"?
100%. Думаю здесь просто отдает борьбой за "нормализацию" и прочие академические каноны.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36477407
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spУ нас абстрактная сущность Контрагент существует не абстрактно - в договоре Поле Контрагент используется очень активно при этом не не надо мучаться как в это поле запихнуть Физика или Юрика

С ваших слов можно понять, что сущности Контрагент у вас нет. Зато есть одноимённый атрибут сущности Договор.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36477412
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafm,

да. Слово "нормализация" именно в кавычках.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36477477
blest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВаскецовblestЭто значит, что при другом варианте можно сделать 3 поля, и в другой таблице.
И в чем проблема? Вам необходимо отдельно иметь имя, фамилию?
Или достаточно просто иметь некое наименование, например, для отчета "Список должников бабла"?

Проблема в том, что я до сих пор так и не определился делать все в одной таблице или в нескольких.
Юр. лицо состоит из названия контрагента + организационная правовая форма (ООО, ЗАО)
Физ. лицо из Фамилии Имени и Отчества + начальство хочет ввести Фамилию в родительном падеже.

По мне так разные атрибуты, так в одной таблице хранить все эти поля или в разных?
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36477807
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blestПроблема в том, что я до сих пор так и не определился делать все в одной таблице или в нескольких
Это сейчас конкретно про ФИО, или опять к началу ушли?

blestЮр. лицо состоит из названия контрагента + организационная правовая форма (ООО, ЗАО)
Посмешили, спасибо. "Юр. лицо состоит" - уже неплохо.
У юрика есть юр. наименование, адрес, и т.п.
И вообще ещё не факт, что во всяких отчетах типа приведенного надо иметь именно полное официальное наименование юрика. Какое-нибудь отделение сбербанка замучаетесь читать в отчете. Естественно, если печатная форма регламентирована с точностью до расстояния между штрихами, там не забалуешься, но в прочих случаях (типа отчета "список должников бабла") нафиг это не надо.

blestФиз. лицо из Фамилии Имени и Отчества + начальство хочет ввести Фамилию в родительном падеже.
Обычно в падежах ведут, чтобы автоматически печатать "От кого", "Кому" и т.п. А следовательно, это касается только небольшой части контрагентов (и, кстати, необязательно физиков, но и ИП, например). Потому это можно смело делать отдельной табличкой.

blestПо мне так разные атрибуты, так в одной таблице хранить все эти поля или в разных?
Что значит "разные"? Если боретесь за чистоту, тогда атрибута "юр.наименование" у физиков вообще нет, у юриков нет атрибута "ФИО", а для целей поиска, печатания в отчетах и т.п. необходим третий атрибут "Наименование" (ну или "Имя", "Описание", как хотите, суть не меняется). Соответственно, борцы за чистоту поле "Наименование" суют в корневую таблу, а в пристёгивающиеся таблички - соответственно "ФИО" и "Юр.Наименование".
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36477815
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но если сделать только одно поле наименование, и в него пихать для физиков ФИО, а для юриков полное официальное наименование - это работать будет. Только это не всегда удобно.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36477826
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blest,

предлагаешь нам определиться за тебя?

Проведи анализ, что будет в разных ситуациях, если все поля будут в одной таблице. Если принципиальных проблем нет, то исходя из принципа минимизации количества таблиц, останавливаемся на этом варианте.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36477852
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВаскецовНо если сделать только одно поле наименование, и в него пихать для физиков ФИО, а для юриков полное официальное наименование - это работать будет. Только это не всегда удобно.

Если так сделать, в таблице придётся иметь тэг, по которому в случае надобности определять с чем мы имеем дело - с ФИО или с названием конторы. Т.е. метаданные, которым самое место в словаре БД, влезут в каждую запись таблицы. К стати, в случае организации ФИО скорее всего будет востребовано для хранения персональных данных о руководителе конторы и т.п.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36477866
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabЕсли так сделать, в таблице придётся иметь тэг, по которому в случае надобности определять с чем мы имеем дело - с ФИО или с названием конторы
Зачем это иметь именно в этой таблице?
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36477953
blest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blestФиз. лицо из Фамилии Имени и Отчества + начальство хочет ввести Фамилию в родительном падеже.
Обычно в падежах ведут, чтобы автоматически печатать "От кого", "Кому" и т.п. А следовательно, это касается только небольшой части контрагентов (и, кстати, необязательно физиков, но и ИП, например). Потому это можно смело делать отдельной табличкой.

blestПо мне так разные атрибуты, так в одной таблице хранить все эти поля или в разных?
Что значит "разные"? Если боретесь за чистоту, тогда атрибута "юр.наименование" у физиков вообще нет, у юриков нет атрибута "ФИО", а для целей поиска, печатания в отчетах и т.п. необходим третий атрибут "Наименование" (ну или "Имя", "Описание", как хотите, суть не меняется). Соответственно, борцы за чистоту поле "Наименование" суют в корневую таблу, а в пристёгивающиеся таблички - соответственно "ФИО" и "Юр.Наименование".[/quot]

Ок, я как раз про борьбу за "чистоту" и говорю. Именно потому я склоняюсь, к существованию дочерних таблиц: физики - ФИО(и может другие доп.атрибуты) и юрики- название(наименование) + ОПФ(и может другие доп.атрибуты). Соответственно для редактирования выводить каждое из этих полей отдельно, а скажем для отчетов выводить наименование контрагента вьюхой, где будут объединяться эти поля. Нормальный вариант?
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36477961
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blestНормальный вариант?
Работать это будет, а насчет "нормальный" - сказать сложно.
...
Рейтинг: 0 / 0
Создание таблицы контрагентов
    #36477976
blest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВаскецовblestНормальный вариант?
Работать это будет, а насчет "нормальный" - сказать сложно.

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


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