|
|
|
Много сущностей, большинство полей одинаковые - как организовать таблицы. нужна критика
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! В базе ожидается множество видов контрагентов: поставщики, покупатели, перевозчики, охранные предприятия, ремонтники и т.д. Какое их сходство: 1)Все они могут подразделяться на два типа (к примеру юр. лица и частники). 2)Структура контактной информации у всех контрагентов одинаковая, только есть небольшое отличие по типам (Если юр лица , то Наименование компании, ИНН, КПП, рс и т.д.; если физ лица - ФИО, год рождения, паспортные данные) На этом их сходство заканчивается. Каждый вид контрагентов после имеет свои собственные документы индивидуальной структуры, собственные отчеты. Какое я решение вижу: Создать таблицу аля _Types - в ней создать следующие поля: >id_type name_type prefix_type description Получим таблицу типов. В нее можем занести все виды контрагентов с уникальными префиксами типа (client_, security_ и т.д.). Эти префиксы потом будут подставляться к наименованию таблицы, которая относится только к этому контрагенту (например: таблица заказов client_ order) А далее создаем 3 таблицы: 1) Persons >id_person status (тип юр лицо либо физ лицо; по поводу типа данного поля пока затрудняюсь (либо INT переключатель 1|0; либо это тоже будет ключ из таблицы status_person, в которой будет всего два поля (id_status, status) и две записи )) 2) Jur_person (для юр лиц) >id id_person (ключ из таблицы Person) id_type (ключ из таблицы _Types) name contact INN KPP ....... 3) Phys_person (для физ лиц) >id id_person (ключ из таблицы Person) id_type (ключ из таблицы _Types) name surname ........... Пожалуйста, покритикуйте! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2011, 10:57 |
|
||
|
Много сущностей, большинство полей одинаковые - как организовать таблицы. нужна критика
|
|||
|---|---|---|---|
|
#18+
DSFC, По пункту 1 - а есть понятие, куда отнесете ПБОЮЛ ? По пункту 2 - ИМХО, не здорово, что создаются динамические префиксы для таблиц, так как многие запросы придется делать в динамике. Может подумать на тему - справочники типов контрагентов - юр.лиц и набор аттрибутов, которые будут отноститься к тому или иному типу контрагентов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2011, 11:17 |
|
||
|
Много сущностей, большинство полей одинаковые - как организовать таблицы. нужна критика
|
|||
|---|---|---|---|
|
#18+
DSFCПожалуйста, покритикуйте! В абсолютно аналогичной ситуации использую EAV для самих объектов + классификаторы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2011, 11:51 |
|
||
|
Много сущностей, большинство полей одинаковые - как организовать таблицы. нужна критика
|
|||
|---|---|---|---|
|
#18+
DSFCЭти префиксы потом будут подставляться к наименованию таблицы, которая относится только к этому контрагенту (например: таблица заказов client_ order)Зачем так делать??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2011, 11:54 |
|
||
|
Много сущностей, большинство полей одинаковые - как организовать таблицы. нужна критика
|
|||
|---|---|---|---|
|
#18+
Edkonst2008 , авторПо пункту 1 - а есть понятие, куда отнесете ПБОЮЛ ? В задании про это ничего не говорится, но никто не даст гарантии, что такого рода предприниматели не появятся. Поэтому я склоняюсь больше к варианту с отдельной таблицей юридических статусов. Далее по поводу префиксов, действительно неправильно и коряво, помимо ненужной "динамики" таблиц, в первоначальном варианте появляется жесткая привязка к типам контрагентов, а это очень может пагубно сказать на дальнейшую логику приложения, т.к. не исключено, что один и тот же контрагент может отобразиться в базе в нескольких ролях. По поводу атрибутов. Скорей всего будет оптимальней создать одну таблицу аттрибутов и одну таблицу на значения этих аттрибутов. В итоге я пока альтернативу вижу следующую: 1) Person_status (юр статус различных лиц) >id_status name_status 2) Person_list (список всех контрагентов) >id_person id_status (внешний ключ от таблицы person_status) 3) Person_attribute_list (список аттрибутов, которые будут встречаться) >id_person_attribute name type (тип данных (int, bool, string)) 4)Person_attribute_value (значение аттрибутов) >id id_person id_person_attribute value Пока слабым местом здесь вижу тип данных и разделение на значение аттрибутов. Пихать в текстовое поле абсолютно все: числа и болевые значения не считаю хорошо. Тут вариант решения следующий, либо в 4-ой таблице добавить поля value_int, value_bool, value_decimal, либо как здесь на разные таблицы. Мне кажется, что приемлем больше первый вариант. Что скажете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2011, 13:42 |
|
||
|
Много сущностей, большинство полей одинаковые - как организовать таблицы. нужна критика
|
|||
|---|---|---|---|
|
#18+
> Пока слабым местом здесь вижу тип данных и разделение на значение аттрибутов. А также поддержка уникальности, ссылочной целостности, вторичных индексов, уродливый синтаксис, и проблемы с производительностью Ищите по форуму по слову EAV. > Много сущностей, большинство полей одинаковые - как организовать таблицы. Ищите по форуму про реализацию наследования. Обсуждалось много раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2011, 16:08 |
|
||
|
Много сущностей, большинство полей одинаковые - как организовать таблицы. нужна критика
|
|||
|---|---|---|---|
|
#18+
Да тут было бы неплохо применить наследование таблиц - иначе производительность в один прекрасный момент просто ляжет. Считаю, что EAV нужно применять умеренно. авторподдержка уникальности, ссылочной целостности, вторичных индексов Что-то не особо заметно в последнем примере проблемы с уникальностью, не тыкните пальцем, коллега? А то в конце рабочего дня может действительно не досматриваю что-то. А синтаксис действительно оформлен не очень. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2011, 18:49 |
|
||
|
Много сущностей, большинство полей одинаковые - как организовать таблицы. нужна критика
|
|||
|---|---|---|---|
|
#18+
LexNext Что-то не особо заметно в последнем примере проблемы с уникальностью, не тыкните пальцем, коллега? предположим мы хотим обеспечить уникальность некоего свойства контрагента (ИНН лицевой счет и т.п.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2011, 04:59 |
|
||
|
Много сущностей, большинство полей одинаковые - как организовать таблицы. нужна критика
|
|||
|---|---|---|---|
|
#18+
EAV. Делаем таблицу объектов, куда выносим общие для всех типов контрагенов данные - поля по которым будем индексировать, а те данные, которые отличаются или не важные (как то - примечание, описание и прочее), кладем в таблицу рядом с полями ID, Код Атрибут, Значение. Допустимые атрибуты лежат в другой таблице в виде справочника (если хотите можете еще сделать связь многие ко многим указав доступные атрибуты к каждому типу контрагента). В зависимости от используемой СУБД потом можно сделать оптимизацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2011, 16:30 |
|
||
|
Много сущностей, большинство полей одинаковые - как организовать таблицы. нужна критика
|
|||
|---|---|---|---|
|
#18+
Гришков Максим Делаем таблицу объектов, куда выносим общие для всех типов контрагенов данные - поля по которым будем индексировать,Совершенно согласен. Некоторые даже индексировать не надо. Гришков Максим а те данные, которые отличаются или не важные (как то - примечание, описание и прочее), кладем в таблицу рядом с полями ID, Код Атрибут, ЗначениеА почему не в обычные таблицы поставщики, покупатели, перевозчики, охранные предприятия, ремонтники и т.д Плюс набор вьюх: таблица сджойненая с предком и одна большая вьюха предок лефтджойненый с деталями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2011, 17:17 |
|
||
|
Много сущностей, большинство полей одинаковые - как организовать таблицы. нужна критика
|
|||
|---|---|---|---|
|
#18+
Гришков МаксимВ зависимости от используемой СУБД потом можно сделать оптимизацию.Сначала применить самую медленную реализацию, чтобы потом сделать оптимизацию :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2011, 17:38 |
|
||
|
Много сущностей, большинство полей одинаковые - как организовать таблицы. нужна критика
|
|||
|---|---|---|---|
|
#18+
DSFC Edkonst2008 , авторПо пункту 1 - а есть понятие, куда отнесете ПБОЮЛ ? В задании про это ничего не говорится, но никто не даст гарантии, что такого рода предприниматели не появятся. Поэтому я склоняюсь больше к варианту с отдельной таблицей юридических статусов. Такая таблица хорошо известна и называется ОКОПФ Не изобретайте велосипед, ознакомьтесь с перечнем общероссийских классификаторов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2011, 12:59 |
|
||
|
Много сущностей, большинство полей одинаковые - как организовать таблицы. нужна критика
|
|||
|---|---|---|---|
|
#18+
SERG1257А почему не в обычные таблицы поставщики, покупатели, перевозчики, охранные предприятия, ремонтники и т.д Плюс набор вьюх: таблица сджойненая с предком и одна большая вьюха предок лефтджойненый с деталями. Просто автору поста нужна была гибкая структура хранения данных. Как я понимаю, заведомо неизвестно какое количество атрибутов будет у каждого контрагента, поэтому группировать их по таблицам, по-моему, не имеет смысла. В производительности выигрываем самую малость, а при построении запросов придется привязываться к разным сущностям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2011, 11:03 |
|
||
|
Много сущностей, большинство полей одинаковые - как организовать таблицы. нужна критика
|
|||
|---|---|---|---|
|
#18+
авторуродливый синтаксис А не подскажете где можно почитать про стандарты наименования полей и таблиц в БД? Такая таблица хорошо известна и называется ОКОПФ Не изобретайте велосипед, ознакомьтесь с перечнем общероссийских классификаторов. Спасибо, приму к сведению. По поводу наследования - оно бы все хорошо, если бы не MySql. В Posgresql или Oracle - это решается на раз. Насчет загруженности БД при применении EAV согласен - момент узкий. А вообще, обратил внимание на 1C. Там очень грамотно на мой взгляд сделано. Единый справочник контрагентов (в нем как физ так и юр лица - никаких доплнительных делений на ПБОЮЛ ЗАО нет - и отличий там немного КПП заменяется на ФИО) и все они могут быть разделены на разные группы, причем может быть группа в группе. Ткнул этим примером составителем задания - они согласились то, что действительно полей "несхожих" не так уж и много. авторА почему не в обычные таблицы поставщики, покупатели, перевозчики, охранные предприятия, ремонтники и т.д Потому что поставщик может оказаться покупателем, а потом ещё и перевозчиком. Вот как можно сделать после "послабления" тз. PersonGroup (Таблица групп) >IdGroup Name PersonGroupContent (Содержания групп) >Id IdGroup IdPerson PersonStatus (Таблица статусов Юр. Физ лица) >IdStatus Name PersonListGeneral (Общая таблица контрагентов) >IdPerson IdStatus Name INN .... .... ... PersonListJur (таблица юр лиц дополнение) >Id IdPerson KPP ..... PersonListPhys (таблица физ лиц дополнение) >Id IdPerson FIO ..... Т.е. что получается на выходе, т.к. у нас нет отдельных таблиц поставщиков, охраны , то эти значения придется забивать в указанные в выше таблице, в качестве умолчательных групп с запретом на их редактирование и удаление. Что скажете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2011, 00:31 |
|
||
|
Много сущностей, большинство полей одинаковые - как организовать таблицы. нужна критика
|
|||
|---|---|---|---|
|
#18+
DSFC А вообще, обратил внимание на 1C. Там очень грамотно на мой взгляд сделано. Единый справочник контрагентов (в нем как физ так и юр лица - никаких доплнительных делений на ПБОЮЛ ЗАО нет - и отличий там немного КПП заменяется на ФИО) и все они могут быть разделены на разные группы, причем может быть группа в группе. Ткнул этим примером составителем задания - они согласились то, что действительно полей "несхожих" не так уж и много. также обратите внимание на MDM системы, и все станет еще яснее. У САПа есть курсы MDM100, MDM200, MDM400, там в основном теория, применимая к проектированию ИС вообще, а не только к настройке SAP MDM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2011, 20:36 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37374260&tid=1542062]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
153ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 463ms |

| 0 / 0 |
