|
|
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarer В современных средствах разработки ни к какой дополнительной унификации кода это не приводит... Более того, приводит к появлению в коде большого количества "магических цифр" или "магических слов" - так как эти категории надо как-то ведь ещё и различать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 14:08 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
OraNew2007Не могли бы вы подробнее аргументировать какие минусы хранения простых справочников в одной таблице, какие плюсы при создании множества простых таблиц-справочников именно для Oracle. Спасибо. Oracle вряд ли отличается здесь от других сходных СУБД. Аргументация следующая: 1. Объединение не дает никаких преимуществ. Операций "над всеми справочниками скопом", скажем "значение должно быть уникально среди всех записей всех справочников" практически не встречается. Клиентский код типа "редактирование любого справочника" пишется без каких-либо проблем. 2. При ссылке на "объединенный справочник" возникает опасность сослаться на запись другой категории - скажем, в поле "id валюты" внести id записи "Ботинки 46-го размера". Избавиться от этого эффекта можно только денормализацией и составным внешним ключом, включающим id категории. А такое решение - мусор и большие накладные расходы. 3. Осложняется реализация всех прочих бизнес-правил, относящихся к справочникам. Скажем, "код валюты" должен быть написан большими буквами и состоять из трех знаков, а "название категории" может быть длинным, но первая буква обязана быть заглавной, остальные неважно - и вот это вкупе с еще десятком вариантов относится к одному полю. 4. В любой код, работающий с "объединенным справочником", нужно не забывать добавлять фильтр по категории или напротив, заполнение поля категория. Можно уверенно утверждать, что если не использовать вспомогательных средств (например, view with check option), где-то такие проверки будут забыты. А если использовать - возникает вопрос, нафига эта общая таблица, если работаем с "отдельными". 5. Добавление новых полей и вообще изменение требований к конкретному справочнику повиснет дамокловым мечом, геморроем в каждом случае. Скажем, представьте себе, что один справочник нужно насадить на временную ось (добавить поля date_from - date_to со смыслом "в такой-то интервал времени название было таким-то), а другие - оставить как есть. 6. C точки зрения производительности объединенный справочник - скорее плох. Потребуется собирать гистограммы по всем полям внешних ключей и в общем - дополнительный геморрой, возникающий из-за искусственно внесенного в данные перекоса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 14:24 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
SPQR softwarer...назвать хотя бы одно осмысленное преимущество такой вот "кучи малы" (под неосмысленными я понимаю, например, экономию нескольких килобайт дискового пространства). Попробовал - и не смог. Так до сих пор и не могу, одни минусы. Например, унификация кода, что может сократить время разработки и снизить кол-во ошибок.Ну, это вы загнули Есдинственно что хорошего в такой таблице - не плодится новых объектов в БД, не надо создавать для них отдельные стандартные триггера. К экономии места - это не имеет никакого отношения. Что плохого в таком подходе - масштабиремость. Но при разумном использовании - это не заметно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 14:50 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
[quot softwarer [/quot] Я, вообще то, имел в виду код серверной части приложения и полагаю что для простейших справочников такой подход вполне м.б. применим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 14:55 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarer OraNew2007Не могли бы вы подробнее аргументировать какие минусы хранения простых справочников в одной таблице, какие плюсы при создании множества простых таблиц-справочников именно для Oracle. Спасибо. Oracle вряд ли отличается здесь от других сходных СУБД. Аргументация следующаяВсе это верно, если говорить о СПРАВОЧНИКЕ. egorychБолее того, приводит к появлению в коде большого количества "магических цифр" или "магических слов" - так как эти категории надо как-то ведь ещё и различатьНету кода, который не зависит от магических слов - если это не название категории, то это название таблицы. Если не таблицы, то название поля итд. Если какую-то строку надо сделать выбором по умолчанию - то эту строку надо как-то обозначить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 15:01 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
BelyВсе это верно, если говорить о СПРАВОЧНИКЕ. Читаем первое сообщение темы вплоть до уверенного ответа на вопрос "говорится ли там о справочниках"....? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 15:05 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarer BelyВсе это верно, если говорить о СПРАВОЧНИКЕ. Читаем первое сообщение темы вплоть до уверенного ответа на вопрос "говорится ли там о справочниках"....?Есть небольшая разница между, СПРАВОЧНИКОМ и справочником ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 15:17 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
BelyНету кода, который не зависит от магических слов - если это не название категории, то это название таблицы. Если не таблицы, то название поля итд. Т.е. Вы полагаете, что названия категории достаточно? Всё-же придётся таки и таблицу и поле указать и в этом случае и плюс - название категории. Да и названия таблиц/полей в БД всё-же потенциально меняются значительно реже, чем категории. И сделать так, чтобы изменение названия таблицы/поля прошло безболезненно для клиентского приложения на порядки проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 15:20 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
egorych BelyНету кода, который не зависит от магических слов - если это не название категории, то это название таблицы. Если не таблицы, то название поля итд. Т.е. Вы полагаете, что названия категории достаточно? Всё-же придётся таки и таблицу и поле указать и в этом случае и плюс - название категории. Да и названия таблиц/полей в БД всё-же потенциально меняются значительно реже, чем категории. И сделать так, чтобы изменение названия таблицы/поля прошло безболезненно для клиентского приложения на порядки проще.Мда... я бы предложил вам поэкспериментировать с двумя этими вариантами, чтобы не засорять зазря эфир. Да, придется указать еще и имя таблицы. Я даже скажу больше - придеься указать ключевое слово SELECT и еще как минимум FROM, что можно считать вообще сверхзадачей :) Лично я не вижу принципиальной разницы для программиста между запросами: Код: plaintext Код: plaintext Про изменения - просто так категории не надо менять и будет у вас все хорошо. По поводу переделки названия поля или названия категории - трудозатраты всеравно одинаковые. Залезть в программу... поправить запрос... поправить код... Не в ту сторону копаете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 15:32 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
egorychИ сделать так, чтобы изменение названия таблицы/поля прошло безболезненно для клиентского приложения на порядки проще. текст в FROM меняется легче чем текст в WHERE? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 15:38 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
BelyЛично я не вижу принципиальной разницы для программиста между запросами: Код: plaintext Код: plaintext А я вижу. Разница в том, что запросы Код: plaintext 1. 2. будут быстро и эффективно исправлены, а вот Код: plaintext 1. 2. имеют неплохие шансы стать "ошибкой, которая проявится уже после внедрения у пользователя". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 15:49 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
2iscrafm : можно в БД подменить таблицу вьюхой и клиентский код вообще не нужно будет менять, ага а ещё, а ещё.... BelyПро изменения - просто так категории не надо менять и будет у вас все хорошо. хорошо-бы было, чтоб и небо было голубое и вода мокрая и заказчики выдавали-бы толковые и понятные ТЗ, и мир-бы не менялся и грибы-бы росли прямо во рту.... по-разному бывает, неужели не встречались с такими граблями? я Вам искренне завидую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 16:00 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarerА я вижу. Разница в том, что запросы Код: plaintext А проверить на то что, выпадающий список пустой - проверка первоочередная. Неубедительно... В качестве плюса использования одной таблицы - могу сказать, что в одной таблице проще искать строку "по значению", нежели в нескольких. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 16:05 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
egorych по-разному бывает, неужели не встречались с такими граблями? я Вам искренне завидую встречался с разными проблемами, но чтобы были проблемы в связи с хранением данных простейших справочников в одной таблице - нет. Да и не только простейших справочников. Например однотипные документы. Нет в этом никаких проблем. И конечно утверждения, что имя таблицы поменять легко, а условие WHERE оказывается архисложно, да еще и ошибками грозит... согласитесь, несколько наигранно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 16:09 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
egorychхорошо-бы было, чтоб и небо было голубое и вода мокрая и заказчики выдавали-бы толковые и понятные ТЗ, и мир-бы не менялся и грибы-бы росли прямо во рту.... по-разному бывает, неужели не встречались с такими граблями? я Вам искренне завидуюЕсть несколько правил, которые сильно облегчают жизнь. Например: Не менять PK у записи. Вместо того, чтобы переписать функцию полностью - добавь параметр со значениям по умолчанию. Не менять категорию - это одно из них. Запомнить легко, следовать - еще проще. И что приятно - для того, чтобы следовать этим правилам - не надо советоваться с заказчиками и лесниками. И грибы будут расти в лесу, где им положено, а не во рту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 16:12 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Проблемы начинаются когда справочник перестаёт быть простым, или один из типов документов перестаёт быть "однотипным", простите за туфталогию. И всё это случается на ходу и всё надо "вчера" и сидишь пол-ночи рассматриваешь все свои WHERE и выпадающие списки, где тебе теперь надо чего-то поменять. И вот ведь какая штука получается, обязательно пару-тройку всё-же пропустишь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 16:23 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
egorychПроблемы начинаются когда справочник перестаёт быть простым, или один из типов документов перестаёт быть "однотипным".Это проблема дизайна. У нас 50% справочников спокойно укладываются в простую таблицу и живет там несколько лет без всяких попыток расшириться. Остальная половина - живет полноценной жизнью в отдельных таблицах. egorychИ всё это случается на ходу и всё надо "вчера" и сидишь пол-ночи рассматриваешь все свои WHERE и выпадающие списки, где тебе теперь надо чего-то поменять.Это проблема управления. Авральная работа никогда до добра не доводит. Не забудишь WHERE - забудешь записать остатки по счетам или тупо выполнить какую-нибудь процедуру. Одна таблица или много таблиц - здесь всеравно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 16:36 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
BelyА проверить на то что, выпадающий список пустой - проверка первоочередная. Легко построить примеры ситуаций, когда проблемы такого плана ненайденными преодолеют стадию тестирования. Я, разумеется, имею в виду "экономически оправданное тестирование", а не "полное комплексное тестирование после каждого чиха". Скажем: - для справочника X заводится категория "X" и дополнительное поле F_X - в одном из запросов пишется where F_X = '12345' и при этом не делается проверки CATEGORY = 'X' - это "правильно" работает из-за того, что "X" - единственная категория, в которой используется поле F_X - через год для совсем другого модуля добавляется справочник-категория "Y", в которой также используют поле F_X - "другой модуль" успешно проходит тестирование и клиентам едет вводящий его патч. Что же до "полного комплексного тестирования после каждого чиха" - мне неизвестен вендор, который проводил бы его. Причем не из-за лени и халатности, а из-за стоимости. BelyНеубедительно... Ваше право. BelyВ качестве плюса использования одной таблицы - могу сказать, что в одной таблице проще искать строку "по значению", нежели в нескольких. А нафига такая операция? "В каком именно справочнике присутствует значение 'USD'"? Как-то не в состоянии представить потребность в таком запросе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 16:42 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Bely ... У нас 50% справочников спокойно укладываются в простую таблицу и живет там несколько лет без всяких попыток расшириться ... - ну значит не встречались, подтверждаю - искренне завидую. Это хорошо, когда дизайн устоявшийся и клиент всегда знает, чего он хочет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 16:43 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarerЧто же до "полного комплексного тестирования после каждого чиха" - мне неизвестен вендор, который проводил бы его. Причем не из-за лени и халатности, а из-за стоимости.Я в одной своей программе удалил 4 символа и вставил 3, после чего всю систему перетестирывали в течении двух месяцев. Завели под это отдельный проект. Просто система касалась лицензирования продуктов, я поменял параметры генератора лицензий, лицензии отправлялись эндюзерам. Компания называется Genesys Вот такой вот чих получился... softwarerА нафига такая операция? "В каком именно справочнике присутствует значение 'USD'"? Как-то не в состоянии представить потребность в таком запросе.Если память отказала. Есть ли такой справочник или заводить новый итп. Чисто человеческие причины. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 17:03 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarerА нафига такая операция? "В каком именно справочнике присутствует значение 'USD'"? Как-то не в состоянии представить потребность в таком запросе. в каком документе присутствует 'USD'... и т.д. и т.п. построить систему можно по разному. Например на каждое предприятие создавать свою БД , как это делается в Nav или держать данные в одном наборе таблиц, разделяя их при помощи атрибута DataArea, как в Ax. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 17:03 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
iscrafmв каком документе присутствует 'USD'... А поподробнее, если не затруднит? У нас документы - это уже строки справочника? iscrafmпостроить систему можно по разному. Можно. Можно вообще положить всю БД в одну таблицу. И если коллега утверждает, что в этом есть некий цимес - пытаюсь выяснить, какой именно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 22:40 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
2 iscrafm : О, Nav! Яркий пример Вашего подхода - но там хотя-бы понятно, зачем так делается - чтобы денег лишних не платить за каждую таблицу.... да и строго говоря - Navision - не реляционная БД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 22:49 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarer iscrafmв каком документе присутствует 'USD'... А поподробнее, если не затруднит? У нас документы - это уже строки справочника? нет, документы в данном случае - однотипные таблицы, то о чем речь в теме идет. softwarer iscrafmпостроить систему можно по разному. Можно. Можно вообще положить всю БД в одну таблицу. И если коллега утверждает, что в этом есть некий цимес - пытаюсь выяснить, какой именно. речь идет об однотипных таблицах, не заметили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 22:54 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
egorych2 iscrafm : О, Nav! Яркий пример Вашего подхода - но там хотя-бы понятно, зачем так делается - чтобы денег лишних не платить за каждую таблицу.... да и строго говоря - Navision - не реляционная БД Это не пример моего подхода. Он был приведен в пример совсем с другой целью. И конечно же Navision не является реляционной БД, это ERP система. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 22:58 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34558075&tid=1542889]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
176ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
84ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 510ms |

| 0 / 0 |
