|
|
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
Добрый день. Подскажите пожалуйста, какая схема лучше. Что будет работать быстрее? Во всех случаях используется три таблицы. Схема 1 Пояснение: при создании в DICT_FIELDS срабатывает триггер, который обрабатывает вставляемую или удаляемую запись и вставляет/удаляет столбец с данным типом и именем в DICT_VALUE. При выборе данных программа смотрит по ID какие поля ей еще надо забирать и выводит их в GUI. Схема 2 Пояснение: при создании в DICT_LIST если PID = null - справочник, PID != null - поле справочника. В таблице DICT_FIELDS создается запись с ссылкой на поле и запись в справочнике и в зависимости от типа в DICT_LIST пишется либо в int_value, либо в varchar_value. При выборе соответственно для каждой записи справочника, где pid = ID справочника выбираются сведения из третьей таблицы и выводятся в GUI. P.S. Все это безобразие в PostgreSQL. Использоваться все это безобразие будет редко, только для связывания двух справочников, например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2014, 15:16 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
Raxta Подскажите пожалуйста, какая схема лучше. Что будет работать быстрее? Код: sql 1. 2. Все остальное безобразие За аргументами в поиск ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2014, 17:45 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
Обычно я объединяю однотипные справочники, но в данном случае +1 к предыдущему оратору. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2014, 01:28 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
Raxtaбудет работать быстрее? А что это за критерий такой - "быстрее" ? Объясните, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2014, 08:43 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
Просто необходима универсальная система, что бы пользователи могли сами настраивать справочники и добавлять какие-то свои поля через GUI. Если дать пользователю свободу создавать каждый справочник в отдельной таблице - потом будет сложнее поддерживать разных пользователей. Быстрее в том плане, насколько быстро нужные данные забираться будут из справочников. В первом случае таблица растет в ширину и появляются избыточные поля, а так же необходимость сначала собрать запрос (какие поля для определенного справочника забирать), потом выполнить и вывести пользователю. Во втором случает есть необходимость хп или сложного запроса, что бы извлекать данные, при этом еще надо обрабатывать случаи, когда у одной записи в справочнике есть данные в доп.поле, а у другой нет. Вот и интересно, что лучше работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2014, 09:09 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
Raxta, Изменение пользователем структуры объектов базы данных - зло ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2014, 12:02 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
Cat2, Я знаю, что зло и я против этого, но вот тут необходимость такая есть и надо сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2014, 12:14 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
Курите EAV, но все равно это зло ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2014, 12:51 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
2 таблицы хватит, зачем третья? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2014, 13:01 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2014, 13:02 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
Ivan Durak, Гибрид первого и второго? Если в первой таблице pid != null, то создать во второй новый столбец? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2014, 13:25 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
RaxtaIvan Durak, Гибрид первого и второго? Если в первой таблице pid != null, то создать во второй новый столбец? Таблица справочников и таблица столбцов, в таблице столбцов id, dict_id, field_name, field_type, field_valut_int, field_value_text, field_value_numeric. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2014, 14:03 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
Ivan Durak, Как тогда будет выглядеть ситуация, если у одной записи два дополнительных поля? Привязки к конкретному значению доп. полей то нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2014, 14:14 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
RaxtaIvan Durak, Как тогда будет выглядеть ситуация, если у одной записи два дополнительных поля? Привязки к конкретному значению доп. полей то нет. у какой записи?? в справочнике 400 полей - значит будет 400 записей в таблице столбцов привязанных к этому справочнику. Всё! Что такое "дополнительные поля" не понимаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2014, 14:22 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
Ivan Durak, Есть например справочник "Города" в отличие от справочника "Овощи" у него есть дополнительное поле, выводимое в GUI, которое привязывает город к региону. В справочнике "Города" 200 позиций и у каждой свой регион, а в справочнике "Овощи" 150 позиций. Т.е. в одной таблице хранится запись вида <id>,<город>,<регион> и тут же хранятся записи вида <id>,<название_овоща>. Как при Вашей реализации на двух таблицах забрать регион определенного города, если во второй таблице нет привязки доп.поля к определенной записи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2014, 14:26 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
Люто плюсую первому ответившему. Мало того, если справочник по сути enum из предопределённого набора, то заместо суррогатного id можно использовать осмысленное уникальное значение. К таким данным легче писать запросы, легче анализировать их (запросов) результаты, а также можно безнаказанно захардкодить в коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2014, 15:30 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
RaxtaIvan Durak, Есть например справочник "Города" в отличие от справочника "Овощи" у него есть дополнительное поле, выводимое в GUI, которое привязывает город к региону. В справочнике "Города" 200 позиций и у каждой свой регион, а в справочнике "Овощи" 150 позиций. Т.е. в одной таблице хранится запись вида <id>,<город>,<регион> и тут же хранятся записи вида <id>,<название_овоща>. Как при Вашей реализации на двух таблицах забрать регион определенного города, если во второй таблице нет привязки доп.поля к определенной записи? у него есть дополнительное поле, выводимое в GUI, которое привязывает город к региону. Ну вот тебе доп запись в таблице столбцов = field_name = 'FK на регио', field_type = 'Int', field_value_int = 245 (собственно ссылка на регион) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2014, 17:34 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
Raxta что бы пользователи могли сами настраивать справочники и добавлять какие-то свои поля через GUIalter table add column, запрещен? Raxta Если дать пользователю свободу создавать каждый справочник в отдельной таблице - потом будет сложнее поддерживать разных пользователейПо-вашему одна большая куча легче в поддержке, чем та же куча рассортированная по маленьким кучкам, так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2014, 17:41 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
Очень лысыйто заместо суррогатного id можно использовать осмысленное уникальное значение И будет очень весело, когда какой-нибудь пользователь решит, что это значение не особенно осмысленное и решить его переосмыслить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2014, 11:06 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
RaxtaПросто необходима универсальная система, что бы пользователи могли сами настраивать справочники и добавлять какие-то свои поля через GUI. Если дать пользователю свободу создавать каждый справочник в отдельной таблице - потом будет сложнее поддерживать разных пользователей. Быстрее в том плане, насколько быстро нужные данные забираться будут из справочников. В первом случае таблица растет в ширину и появляются избыточные поля, а так же необходимость сначала собрать запрос (какие поля для определенного справочника забирать), потом выполнить и вывести пользователю. Во втором случает есть необходимость хп или сложного запроса, что бы извлекать данные, при этом еще надо обрабатывать случаи, когда у одной записи в справочнике есть данные в доп.поле, а у другой нет. Вот и интересно, что лучше работает. Вот к этому описанию не хватает ещё пару - тройку реальных примеров с реальными данными справочников... У нас же как обычно - спрашивающие не озвучивают первоначальную постановку задачи, а предлагают сразу обсудить своё решение этой неозвученной проблемы, которое кстати (их решение) очень часто бывает кривым или по крайней мере далеко не оптимальным... Как то раз показали схему БД по учету техники (причём рабочую) в которой были таблицы: сист. блок, мышь, клавиатура, монитор, модем, принтер.... и естественно на каждую таблицу форма и отчет и естественно при появлении нового устройства (флешка, USB камера...) была переделка структуры и интерфейса из-за добавления новых таблиц..., а ведь никому даже в голову не пришло создать таблицу "Тип устройства" и таблицу "Устройства" с однотипными полями: код_типа_устройства, инв. №, Изготовитель, Сер. №, и т.д. Если вы хотите в разделе Проектирование БД получить реальную помощь - описывайте всегда проблему, а не своё видение её решения !!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2014, 12:02 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
RaxtaДобрый день. Подскажите пожалуйста, какая схема лучше. Что будет работать быстрее? Во всех случаях используется три таблицы. Ещё раз всем повторяю, при проектировании структуры БД вы не должны думать о быстродействии. Т.е. может быть можно и подумать, но это нужно делать в самую последнюю очередь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2014, 12:02 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
vmag, Хотел подчеркнуть, а не зачеркнуть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2014, 12:04 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
RaxtaДобрый день. Подскажите пожалуйста, какая схема лучше. Что будет работать быстрее? Во всех случаях используется три таблицы. Схема 1 Пояснение: при создании в DICT_FIELDS срабатывает триггер, который обрабатывает вставляемую или удаляемую запись и вставляет/удаляет столбец с данным типом и именем в DICT_VALUE. При выборе данных программа смотрит по ID какие поля ей еще надо забирать и выводит их в GUI. Схема 2 Пояснение: при создании в DICT_LIST если PID = null - справочник, PID != null - поле справочника. В таблице DICT_FIELDS создается запись с ссылкой на поле и запись в справочнике и в зависимости от типа в DICT_LIST пишется либо в int_value, либо в varchar_value. При выборе соответственно для каждой записи справочника, где pid = ID справочника выбираются сведения из третьей таблицы и выводятся в GUI. P.S. Все это безобразие в PostgreSQL. Использоваться все это безобразие будет редко, только для связывания двух справочников, например. Вторая схема -- явноя бредятина, "если PID = null - справочник, PID != null - поле справочника." -- такого бытть не должно. Да и зачем -- тебе отдельной таблицы жалко ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2014, 12:07 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
vmag, Суть проблемы: необходимо сделать систему справочников, в которой может быть две ситуации. 1. Простой справочник вида ID-Значение. 2. Справочник соответствий вида ID-Значение-Значение Все это должно быть кастомизируемым, причем не только разработчиками, которые пилят систему, но и пользователями, которые вдруг решили у сущности добавить какое-то свойство и на это свойство повесить справочник. P.S. Я понимаю, что давать пользователям возможность менять или создавать что-то базовое - плохая идея, потому что рано или поздно все превратится в такую кашу, что ее потом не разгрести. Но есть такие личности, которым уперлась "универсальная схема, что бы все было и можно расширять пользователю". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 08:18 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
RaxtaНо есть такие личности, которым уперлась "универсальная схема, что бы все было и можно расширять пользователю".В этой области рулит EAV. Никаких изменений в структуре базы. Только добавление записей. И SQL-запросы к EAV-у все унифицированы. Что немаловажно для разрабов-новичков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 10:32 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
Буду смотреть в сторону EAV. Всем спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 10:41 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
RaxtaБуду смотреть в сторону EAV. Всем спасибо! в pg (и именно в pg -- т.к. ddl там можно накатывать в транзакциях) не проблема нарисовать security definer ф-ю[и] [owner == superdba] (например как триггер[ы] на таблицу[s] метаданных), который будет [CREATE|ALTER] TABLE , со всеми плюшками оного (CONSTRAINTS, INDEXES, валидация и т.п.). DROP [TABLE/COLUMN] запретить (юзверям). Сделать поле is_dropped в метаданных. Будет в разы шустрее еава. но запросы все придется делать динамическими (пошивать в клиенте, или в хранимках) - по метаописаниям. то же - с интермордами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 11:32 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
Cat2Очень лысыйто заместо суррогатного id можно использовать осмысленное уникальное значение И будет очень весело, когда какой-нибудь пользователь решит, что это значение не особенно осмысленное и решить его переосмыслить Это уже отдельная песня. Про пользователей и их права. Опять таки, я оговорился про перечисление. Т.е. речь о частном случае. Иначе можно скатиться в бесперспективный холивар о том, что лучше: суррогат или естественный ключ. Так или иначе, но этап безоговорочного преклонения перед суррогатами и увлечения EAV у меня, к счастью, в прошлом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 13:56 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
опять школота новички думают, что изобрели велосипед. А когда начинается реальный life-цикл, то куда-то исчезают и остается жуткий говнокод. без обид ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 22:13 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
babona, Вот поэтому и решил сначала посоветоваться, что бы не плодить говнокода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 09:27 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
> жуткий говнокод Говнокод начинается, когда задачи ставят дебилы. Не бывает красивого решения кривой задачи. По определению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 09:33 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
RaxtaВот поэтому и решил сначала посоветоваться, что бы не плодить говнокода. Да ладно чо стеснятся то, здесь все свои. Каждый здесь открывал для себя EAV от перспектив которого захватывало дух - это ж какая экономия, можно только тремя таблицами обойтись, а власти старшие товарищи скрывают. Всю скучную теорию можно выкинуть, пользователей можно не мучить допросами (у нас же гибкая структура), у ДБА можно не выпрашивать прав, и никаких тебе ограничений - полная свобода творчества. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 17:53 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
Не нужно так делать - потом без поллитры не разберешься + потенциальные проблемы с быстродействием. Главный вопрос тут - "зачем юзерам новые поля". Если к этим полям будет какая-то логика прикручиваться или для них будут нужны индексы, то лучше не извращаться и делать отдельные таблицы. Если не будет и индексы не нужны - то вас, скорее всего, обманывают :-) Если справочников реально много, причем большинство из них двухколоночные id, name, то имеет смысл сделать универсальное решение, примерно так: DICTIONARY (ID, VERSION, CREATED, UPDATED, ENABLED, TYPE, TABLENAME, VALUE) TYPE -это тип справочника. Если будет нужен справочник с бОльшим кол-вом полей, то они добавляются в отдельную таблицу со связью один-к-одному, а ее название вписывается в TABLENAME. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2014, 03:04 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
SERG1257Каждый здесь открывал для себя EAV от перспектив которого захватывало дух - .... Вроде не кажный. Кто-то все же смотрел на это как на РМД вывернутую на изнанку. Поскольку типа оно живет в РМД, но РМД не задумывалось для оного. Т.е. на нем, скорей всего, достоинства РМД могут утрачиваться. И вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2014, 09:59 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
vadiminfo Вроде не кажныйХорошо, вас эта болезнь не коснулась scf Если справочников реально много, причем большинство из них двухколоночные id, name, то имеет смысл сделать универсальное решение, примерно такКакой? В теме по универсальным справочникам я так и не услышал ни одного объективного довода ЗА (кроме уменьшения количества таблиц), ВСЕ доводы были - ваши аргументы ПРОТИВ слабые, МНЕ так удобно, поэтому дайте тезисно ВАШИ личные доводы ЗА такую структуру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2014, 17:51 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
SERG1257, довод ЗА - это, очевидно, время добавления нового справочника. причем не только в базу, но и в приложение. Не нужно будет дублировать логику версионности и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2014, 18:09 |
|
||
|
Проектирование системы справочников. Что лучше
|
|||
|---|---|---|---|
|
#18+
scf время добавления нового справочникаУ вас create table долго делается? Или не хотите идти на поклон к ДБА за правами на DDL? А придется, ибо мало справочник создать надо на него ссылатся. scf но и в приложение а здесь-то какой затык? Долго разрабатывать форму для редактирования простейшего справочника? Или пользуетесь универсальной формой на select id, name from universal_dict where type=@type и не знаете как натравить эту форму на select id, name from @dict_table scf Не нужно будет дублировать логику версионности и т.п. Принимается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2014, 18:25 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1540770]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
173ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 304ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...