powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Однотипные таблицы
25 сообщений из 177, страница 2 из 8
Однотипные таблицы
    #34557898
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer В современных средствах разработки ни к какой дополнительной унификации кода это не приводит... Более того, приводит к появлению в коде большого количества "магических цифр" или "магических слов" - так как эти категории надо как-то ведь ещё и различать
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34557957
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OraNew2007Не могли бы вы подробнее аргументировать какие минусы хранения простых справочников в одной таблице, какие плюсы при создании множества простых таблиц-справочников именно для Oracle. Спасибо.
Oracle вряд ли отличается здесь от других сходных СУБД. Аргументация следующая:

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

2. При ссылке на "объединенный справочник" возникает опасность сослаться на запись другой категории - скажем, в поле "id валюты" внести id записи "Ботинки 46-го размера". Избавиться от этого эффекта можно только денормализацией и составным внешним ключом, включающим id категории. А такое решение - мусор и большие накладные расходы.

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

4. В любой код, работающий с "объединенным справочником", нужно не забывать добавлять фильтр по категории или напротив, заполнение поля категория. Можно уверенно утверждать, что если не использовать вспомогательных средств (например, view with check option), где-то такие проверки будут забыты. А если использовать - возникает вопрос, нафига эта общая таблица, если работаем с "отдельными".

5. Добавление новых полей и вообще изменение требований к конкретному справочнику повиснет дамокловым мечом, геморроем в каждом случае. Скажем, представьте себе, что один справочник нужно насадить на временную ось (добавить поля date_from - date_to со смыслом "в такой-то интервал времени название было таким-то), а другие - оставить как есть.

6. C точки зрения производительности объединенный справочник - скорее плох. Потребуется собирать гистограммы по всем полям внешних ключей и в общем - дополнительный геморрой, возникающий из-за искусственно внесенного в данные перекоса.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34558075
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SPQR softwarer...назвать хотя бы одно осмысленное преимущество такой вот "кучи малы" (под неосмысленными я понимаю, например, экономию нескольких килобайт дискового пространства). Попробовал - и не смог. Так до сих пор и не могу, одни минусы.
Например, унификация кода, что может сократить время разработки и снизить кол-во ошибок.Ну, это вы загнули
Есдинственно что хорошего в такой таблице - не плодится новых объектов в БД, не надо создавать для них отдельные стандартные триггера.
К экономии места - это не имеет никакого отношения.

Что плохого в таком подходе - масштабиремость.

Но при разумном использовании - это не заметно.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34558111
SPQR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot softwarer
[/quot]
Я, вообще то, имел в виду код серверной части приложения и полагаю что для простейших справочников такой подход вполне м.б. применим.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34558132
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer OraNew2007Не могли бы вы подробнее аргументировать какие минусы хранения простых справочников в одной таблице, какие плюсы при создании множества простых таблиц-справочников именно для Oracle. Спасибо.
Oracle вряд ли отличается здесь от других сходных СУБД. Аргументация следующаяВсе это верно, если говорить о СПРАВОЧНИКЕ.

egorychБолее того, приводит к появлению в коде большого количества "магических цифр" или "магических слов" - так как эти категории надо как-то ведь ещё и различатьНету кода, который не зависит от магических слов - если это не название категории, то это название таблицы. Если не таблицы, то название поля итд.
Если какую-то строку надо сделать выбором по умолчанию - то эту строку надо как-то обозначить.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34558158
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelyВсе это верно, если говорить о СПРАВОЧНИКЕ.
Читаем первое сообщение темы вплоть до уверенного ответа на вопрос "говорится ли там о справочниках"....?
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34558211
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer BelyВсе это верно, если говорить о СПРАВОЧНИКЕ.
Читаем первое сообщение темы вплоть до уверенного ответа на вопрос "говорится ли там о справочниках"....?Есть небольшая разница между, СПРАВОЧНИКОМ и справочником
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34558228
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelyНету кода, который не зависит от магических слов - если это не название категории, то это название таблицы. Если не таблицы, то название поля итд.
Т.е. Вы полагаете, что названия категории достаточно? Всё-же придётся таки и таблицу и поле указать и в этом случае и плюс - название категории. Да и названия таблиц/полей в БД всё-же потенциально меняются значительно реже, чем категории. И сделать так, чтобы изменение названия таблицы/поля прошло безболезненно для клиентского приложения на порядки проще.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34558280
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych BelyНету кода, который не зависит от магических слов - если это не название категории, то это название таблицы. Если не таблицы, то название поля итд.
Т.е. Вы полагаете, что названия категории достаточно? Всё-же придётся таки и таблицу и поле указать и в этом случае и плюс - название категории. Да и названия таблиц/полей в БД всё-же потенциально меняются значительно реже, чем категории. И сделать так, чтобы изменение названия таблицы/поля прошло безболезненно для клиентского приложения на порядки проще.Мда... я бы предложил вам поэкспериментировать с двумя этими вариантами, чтобы не засорять зазря эфир.
Да, придется указать еще и имя таблицы.
Я даже скажу больше - придеься указать ключевое слово SELECT и еще как минимум FROM, что можно считать вообще сверхзадачей :)

Лично я не вижу принципиальной разницы для программиста между запросами:

Код: plaintext
SELECT * FROM simple_list sl WHERE sl.CATEG_NAME = 'STREET_TYPE'

Код: plaintext
SELECT * FROM DICT_STREET_TYPE st
Экономия в количестве букв легко решается за счет тренировок на стамине.

Про изменения - просто так категории не надо менять и будет у вас все хорошо.
По поводу переделки названия поля или названия категории - трудозатраты всеравно одинаковые.
Залезть в программу... поправить запрос... поправить код...
Не в ту сторону копаете.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34558302
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychИ сделать так, чтобы изменение названия таблицы/поля прошло безболезненно для клиентского приложения на порядки проще.
текст в FROM меняется легче чем текст в WHERE?
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34558360
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelyЛично я не вижу принципиальной разницы для программиста между запросами:

Код: plaintext
SELECT * FROM simple_list sl WHERE sl.CATEG_NAME = 'STREET_TYPE'

Код: plaintext
SELECT * FROM DICT_STREET_TYPE st

А я вижу. Разница в том, что запросы

Код: plaintext
1.
2.
select * from

select * from DICT_STREET_TPE

будут быстро и эффективно исправлены, а вот

Код: plaintext
1.
2.
select * from simple_list sl 

select * from simple_list sl where sl.categ_name = 'STREET_TPE'

имеют неплохие шансы стать "ошибкой, которая проявится уже после внедрения у пользователя".
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34558401
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2iscrafm :
можно в БД подменить таблицу вьюхой и клиентский код вообще не нужно будет менять, ага
а ещё, а ещё....
BelyПро изменения - просто так категории не надо менять и будет у вас все хорошо. хорошо-бы было, чтоб и небо было голубое и вода мокрая и заказчики выдавали-бы толковые и понятные ТЗ, и мир-бы не менялся и грибы-бы росли прямо во рту....
по-разному бывает, неужели не встречались с такими граблями? я Вам искренне завидую
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34558425
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerА я вижу. Разница в том, что запросы
Код: plaintext
select * from DICT_STREET_TPE
Если не проверять код, то ЛЮБАЯ ошибка вылезет у заказчика.
А проверить на то что, выпадающий список пустой - проверка первоочередная.

Неубедительно...

В качестве плюса использования одной таблицы - могу сказать, что в одной таблице проще искать строку "по значению", нежели в нескольких.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34558446
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych
по-разному бывает, неужели не встречались с такими граблями? я Вам искренне завидую
встречался с разными проблемами, но чтобы были проблемы в связи с хранением данных простейших справочников в одной таблице - нет. Да и не только простейших справочников. Например однотипные документы. Нет в этом никаких проблем. И конечно утверждения, что имя таблицы поменять легко, а условие WHERE оказывается архисложно, да еще и ошибками грозит... согласитесь, несколько наигранно.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34558462
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychхорошо-бы было, чтоб и небо было голубое и вода мокрая и заказчики выдавали-бы толковые и понятные ТЗ, и мир-бы не менялся и грибы-бы росли прямо во рту....
по-разному бывает, неужели не встречались с такими граблями? я Вам искренне завидуюЕсть несколько правил, которые сильно облегчают жизнь.
Например:
Не менять PK у записи.
Вместо того, чтобы переписать функцию полностью - добавь параметр со значениям по умолчанию.
Не менять категорию - это одно из них.

Запомнить легко, следовать - еще проще.

И что приятно - для того, чтобы следовать этим правилам - не надо советоваться с заказчиками и лесниками.
И грибы будут расти в лесу, где им положено, а не во рту.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34558525
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблемы начинаются когда справочник перестаёт быть простым, или один из типов документов перестаёт быть "однотипным", простите за туфталогию. И всё это случается на ходу и всё надо "вчера" и сидишь пол-ночи рассматриваешь все свои WHERE и выпадающие списки, где тебе теперь надо чего-то поменять. И вот ведь какая штука получается, обязательно пару-тройку всё-же пропустишь...
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34558602
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychПроблемы начинаются когда справочник перестаёт быть простым, или один из типов документов перестаёт быть "однотипным".Это проблема дизайна.
У нас 50% справочников спокойно укладываются в простую таблицу и живет там несколько лет без всяких попыток расшириться.

Остальная половина - живет полноценной жизнью в отдельных таблицах.

egorychИ всё это случается на ходу и всё надо "вчера" и сидишь пол-ночи рассматриваешь все свои WHERE и выпадающие списки, где тебе теперь надо чего-то поменять.Это проблема управления.
Авральная работа никогда до добра не доводит.
Не забудишь WHERE - забудешь записать остатки по счетам или тупо выполнить какую-нибудь процедуру.

Одна таблица или много таблиц - здесь всеравно.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34558632
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelyА проверить на то что, выпадающий список пустой - проверка первоочередная.
Легко построить примеры ситуаций, когда проблемы такого плана ненайденными преодолеют стадию тестирования. Я, разумеется, имею в виду "экономически оправданное тестирование", а не "полное комплексное тестирование после каждого чиха". Скажем:

- для справочника X заводится категория "X" и дополнительное поле F_X
- в одном из запросов пишется where F_X = '12345' и при этом не делается проверки CATEGORY = 'X'
- это "правильно" работает из-за того, что "X" - единственная категория, в которой используется поле F_X
- через год для совсем другого модуля добавляется справочник-категория "Y", в которой также используют поле F_X
- "другой модуль" успешно проходит тестирование и клиентам едет вводящий его патч.

Что же до "полного комплексного тестирования после каждого чиха" - мне неизвестен вендор, который проводил бы его. Причем не из-за лени и халатности, а из-за стоимости.

BelyНеубедительно...
Ваше право.

BelyВ качестве плюса использования одной таблицы - могу сказать, что в одной таблице проще искать строку "по значению", нежели в нескольких.
А нафига такая операция? "В каком именно справочнике присутствует значение 'USD'"? Как-то не в состоянии представить потребность в таком запросе.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34558641
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bely ... У нас 50% справочников спокойно укладываются в простую таблицу и живет там несколько лет без всяких попыток расшириться ... - ну значит не встречались, подтверждаю - искренне завидую. Это хорошо, когда дизайн устоявшийся и клиент всегда знает, чего он хочет
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34558747
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerЧто же до "полного комплексного тестирования после каждого чиха" - мне неизвестен вендор, который проводил бы его. Причем не из-за лени и халатности, а из-за стоимости.Я в одной своей программе удалил 4 символа и вставил 3, после чего всю систему перетестирывали в течении двух месяцев.
Завели под это отдельный проект.

Просто система касалась лицензирования продуктов, я поменял параметры генератора лицензий, лицензии отправлялись эндюзерам.
Компания называется Genesys

Вот такой вот чих получился...


softwarerА нафига такая операция? "В каком именно справочнике присутствует значение 'USD'"? Как-то не в состоянии представить потребность в таком запросе.Если память отказала. Есть ли такой справочник или заводить новый итп.
Чисто человеческие причины.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34558752
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerА нафига такая операция? "В каком именно справочнике присутствует значение 'USD'"? Как-то не в состоянии представить потребность в таком запросе.
в каком документе присутствует 'USD'... и т.д. и т.п.
построить систему можно по разному. Например на каждое предприятие создавать свою БД , как это делается в Nav или держать данные в одном наборе таблиц, разделяя их при помощи атрибута DataArea, как в Ax.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34559551
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmв каком документе присутствует 'USD'...
А поподробнее, если не затруднит? У нас документы - это уже строки справочника?

iscrafmпостроить систему можно по разному.
Можно. Можно вообще положить всю БД в одну таблицу. И если коллега утверждает, что в этом есть некий цимес - пытаюсь выяснить, какой именно.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34559561
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 iscrafm : О, Nav! Яркий пример Вашего подхода - но там хотя-бы понятно, зачем так делается - чтобы денег лишних не платить за каждую таблицу.... да и строго говоря - Navision - не реляционная БД
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34559568
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer iscrafmв каком документе присутствует 'USD'...
А поподробнее, если не затруднит? У нас документы - это уже строки справочника?

нет, документы в данном случае - однотипные таблицы, то о чем речь в теме идет.

softwarer
iscrafmпостроить систему можно по разному.
Можно. Можно вообще положить всю БД в одну таблицу. И если коллега утверждает, что в этом есть некий цимес - пытаюсь выяснить, какой именно.
речь идет об однотипных таблицах, не заметили?
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34559571
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych2 iscrafm : О, Nav! Яркий пример Вашего подхода - но там хотя-бы понятно, зачем так делается - чтобы денег лишних не платить за каждую таблицу.... да и строго говоря - Navision - не реляционная БД
Это не пример моего подхода. Он был приведен в пример совсем с другой целью. И конечно же Navision не является реляционной БД, это ERP система.
...
Рейтинг: 0 / 0
25 сообщений из 177, страница 2 из 8
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Однотипные таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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