|
|
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Здравствуйте Есть Delphi6+FB 2.0.1+IBX. В базе куча однотипных таблиц-справочников. Структуру имеют: ключевое поле c названием "ID" и поле данных с названием "NAME". Вопрос в том, не будет ли в будущем каких-либо сложностей при однинаковом названии полей во многих таблицах? Насколько это критично? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2007, 18:52 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
если будешь использовать алиасы то не будет. а одна таблица не пойдьот для справочников с parent_id ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2007, 19:01 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
s785Здравствуйте Есть Delphi6+FB 2.0.1+IBX. В базе куча однотипных таблиц-справочников. Структуру имеют: ключевое поле c названием "ID" и поле данных с названием "NAME". Вопрос в том, не будет ли в будущем каких-либо сложностей при однинаковом названии полей во многих таблицах? Насколько это критично? Не будет, если обращаться к полям в запросах так: "Имя_таблицы"."Имя_поля" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2007, 19:19 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
ytrewqесли будешь использовать алиасы то не будет. а одна таблица не пойдьот для справочников с parent_id ? По мере расширения решаемых задач записи справочника обрастают дополнительными атрибутами и превращаются в полноценные сущности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2007, 21:38 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответы, немного успокоился. Пока единственное замеченное неудобство состоит в том, что в design-time при настройке компонент, если в них фигурирует запрос, связывающий две подобные таблицы, то список полей для выбора выглядит как: "ID, ID1, NAME, NAME1..." Таким образом, можно сделать вывод, что так обзывать поля есть нормальная практика, не приводящая к серьёзным осложнениям в будущем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2007, 10:47 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
При росте кол-ва справочников начнете забывать -- что в какой таблице. Я бы голосовал за подход, предложенный ytrewq. Сам использую именно такой. Ведение справочников облегчается и формализуется. А если возникнут индивидуальные атрибуты -- прикрутите в доп. таблице, опять-таки одной на всех. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2007, 12:20 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
s785Таким образом, можно сделать вывод, что так обзывать поля есть нормальная практика, не приводящая к серьёзным осложнениям в будущем? Практика нормальная, никаких осложнений не предвидится. Я поступаю несколько иначе - "широко распространенные" имена полей квалифицирую именем сущности, то есть organization_name, goods_qnt итп. Для меня это несколько удобнее, но причины в общем достаточно мелки - уровня того, что Вы назвали с NAME1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2007, 13:39 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
TyoПри росте кол-ва справочников начнете забывать -- что в какой таблице. TyoВедение справочников облегчается и формализуется. TyoА если возникнут индивидуальные атрибуты -- прикрутите в доп. таблице, опять-таки одной на всех. Cтранно, что Вы до сих пор не пришли к идее хранить всю базу в одной таблице. Или к EAV. TyoСам использую именно такой. Этот аргумент понятен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2007, 13:41 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
TyoА если возникнут индивидуальные атрибуты -- прикрутите в доп. таблице, опять-таки одной на всех. Cтранно, что Вы до сих пор не пришли к идее хранить всю базу в одной таблице. Или к EAV. Ну дык любое мнение можно представить в идиотском свете, если его абсолютизировать. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2007, 13:46 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
TyoПри росте кол-ва справочников начнете забывать -- что в какой таблице. Если по человечески назвать :), то не забудешь. Но я тоже за подход: все справочники в одной таблице. TyoЯ бы голосовал за подход, предложенный ytrewq. Сам использую именно такой. Ведение справочников облегчается и формализуется. +1 TyoА если возникнут индивидуальные атрибуты -- прикрутите в доп. таблице, опять-таки одной на всех. Если одна на всех, то зачем дополнительная? Добавляешь в таблице справочников достаточное количество полей нужных типов и любуешься :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2007, 14:20 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
2 Tyo, Kass Расскажите пожалуйста, как вы обеспечиваете ссылочную целостность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2007, 14:44 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
TyoПри росте кол-ва справочников начнете забывать -- что в какой таблице. Я бы голосовал за подход, предложенный ytrewq. Сам использую именно такой. Ведение справочников облегчается и формализуется. А если возникнут индивидуальные атрибуты -- прикрутите в доп. таблице, опять-таки одной на всех.ЗачОт!Жги ещё! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2007, 15:41 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
s785 пишет: > Структуру имеют: ключевое поле c названием "ID" и поле данных с > названием "NAME". Вопрос в том, не будет ли в будущем каких-либо > сложностей при однинаковом названии полей во многих таблицах? Насколько Нет, не будет. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2007, 09:41 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
На самом деле, может, наоборот, сильно облегчить жизнь при написании интерфейса к этим справочникам, т.к. позволит нарисовать одну универсальную форму для всех справочников ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2007, 22:14 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
авторНа самом деле, может, наоборот, сильно облегчить жизнь при написании интерфейса к этим справочникам, т.к. позволит нарисовать одну универсальную форму для всех справочников Но только одной формой к сожалению не удается обойтись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2007, 08:59 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Palarm авторНа самом деле, может, наоборот, сильно облегчить жизнь при написании интерфейса к этим справочникам, т.к. позволит нарисовать одну универсальную форму для всех справочников Но только одной формой к сожалению не удается обойтись. ИМХО это уже к вопросу о проектировании приложения )))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2007, 10:52 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Надо все-таки разделять модель и представление. Почему это база должна проектироваться с учетом того, чтобы в приложении удобно было в одном окне все показывать? Анатолий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2007, 23:46 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Анатолий ИвановНадо все-таки разделять модель и представление. Почему это база должна проектироваться с учетом того, чтобы в приложении удобно было в одном окне все показывать? Анатолий Вы правы, не должна ))), это просто побочное полезное следствие, и грех им не воспользоваться, коли уж так вышло ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2007, 10:44 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
mcureenab ytrewqесли будешь использовать алиасы то не будет. а одна таблица не пойдьот для справочников с parent_id ? По мере расширения решаемых задач записи справочника обрастают дополнительными атрибутами и превращаются в полноценные сущности.Не всегда. Например список типов улиц (ул., б-р, ш. итд.) У нас для таких супер простых вариантов есть таблица SIMPLE_LIST, где есть поле NAME, ID, CATEG_NAME Разделение происходит именно по CATEG_NAME. Перед тем как сохранять справочник в такой таблице - надо сильно подумать, не добавится ли что-нибудь. Если есть шанс, что таблица потребует расширения - лучше создать отдельную. Реальной выгоды по запоминанию имен - не происходит. Вместо того, чтобы помнить имя таблицы, приходится помнить имя категории. Немного легче искать по значению. Но это не критично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2007, 13:24 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
BelyУ нас для таких супер простых вариантов есть таблица SIMPLE_LIST, где есть поле NAME, ID, CATEG_NAME Когда-то, году в 94-м, я работал примерно так же, на клиппере. Потом, когда пришел на Oracle, задал вопрос - а почему бы не сложить простые справочники таким манером. В ответ на что получил просьбу назвать хотя бы одно осмысленное преимущество такой вот "кучи малы" (под неосмысленными я понимаю, например, экономию нескольких килобайт дискового пространства). Попробовал - и не смог. Так до сих пор и не могу, одни минусы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2007, 14:22 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Только что накопал: Oracle Naming Conventions Fields should be unique within the database schema. Призадумался :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2007, 18:02 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
BelyВместо того, чтобы помнить имя таблицы, приходится помнить имя категории. В этом-то и суть: по категории универсальная прога найдет что нужно, а по имени таблицы ? динамический sql ? а ошибки, ну и т.д. зы для доп. признаков есть разные решения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2007, 09:31 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarerКогда-то, году в 94-м, я работал примерно так же, на клиппере. Потом, когда пришел на Oracle, задал вопрос - а почему бы не сложить простые справочники таким манером. В ответ на что получил просьбу назвать хотя бы одно осмысленное преимущество такой вот "кучи малы" (под неосмысленными я понимаю, например, экономию нескольких килобайт дискового пространства). Попробовал - и не смог. Так до сих пор и не могу, одни минусы. У меня сейчас как раз стоит вопрос проектирования простых справочников (от 2-ух до 10 записей) для Oracle. Не могли бы вы подробнее аргументировать какие минусы хранения простых справочников в одной таблице, какие плюсы при создании множества простых таблиц-справочников именно для Oracle. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 12:00 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarer...назвать хотя бы одно осмысленное преимущество такой вот "кучи малы" (под неосмысленными я понимаю, например, экономию нескольких килобайт дискового пространства). Попробовал - и не смог. Так до сих пор и не могу, одни минусы. Например, унификация кода, что может сократить время разработки и снизить кол-во ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 12:37 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
SPQRНапример, унификация кода Простите, это смешно, и если не ошибаюсь, уже упоминалось выше. В современных средствах разработки ни к какой дополнительной унификации кода это не приводит; если средство не позволяет редактировать одной формой разные таблицы - ему место в помойке, а не среди аргументов. Под "одной формой" я имею в виду вовсе не обязательно один экземпляр класса, а нечто вроде "одного многократно используемого кода" - скажем, базовую форму "справочника" вместе с наследниками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 13:59 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Можем тут поспорить ещё, что такое ERP - системы, используются-ли в них БД, релятивистские-ли они и т.д. и т.п., но не хочется, если честно. Чего хотелось, так понять, в чём преимущества хранения всех справочников в одной таблице перед созданием для каждого справочника таблицы отдельной. Услышал аргументы - облегчённый "поиск по значению", "у нас так сделано" и "проблем ещё не было" - согласитесь, что солидной эту базу доказательств не назвать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 23:34 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
iscrafmнет, документы в данном случае - однотипные таблицы Понятно. То есть чукча не читатель, главное встрять и что-нибудь ляпнуть. iscrafm, то о чем речь в теме идет. Попробуйте что ли прочитать тему. Хотя бы первое письмо, если уж на большее сил не хватает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 23:53 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
egorychМожем тут поспорить ещё, что такое ERP - системы, используются-ли в них БД, релятивистские-ли они и т.д. и т.п., но не хочется, если честно. Чего хотелось, так понять, в чём преимущества хранения всех справочников в одной таблице перед созданием для каждого справочника таблицы отдельной. Услышал аргументы - облегчённый "поиск по значению", "у нас так сделано" и "проблем ещё не было" - согласитесь, что солидной эту базу доказательств не назвать? Во всех этих вопросах проскальзывает одно желание - не возиться с переделкой БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2007, 00:07 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
egorychЧего хотелось, так понять, в чём преимущества хранения всех справочников в одной таблице перед созданием для каждого справочника таблицы отдельной.Да их, в общем-то и нет. Разные справочники, как правило, описывают разные сущности с разным набором свойств, поэтому для того, чтобы поместить их все в одну таблицу, надо приложить немало усилий, и, как говориться в одном анекдоте, быть "очень сильным". Другое дело, когда речь идет о частном случае справочников, если так можно выразиться, - классификаторах, которые имеют стандартный и ограниченный набор свойств, чаще всего это некий код и наименование(описание). В таком случае есть огромный соблазн "засунуть" их все в одну таблицу, с целью сократить усилия на написание и дублирование кода, который ими оперирует. Полагаю, это желание и есть основная причина, по которой нечто, вообще говоря - достаточно разнородное, пытаются "впихнуть" в одну таблицу. И тут же появляется маленький "бонус", теоретически пользователи могут сами добавлять новые виды классификации, при желании - иерархической. На мой взгляд, такое "слияние" не очень оправдано, тем более, что она чревато, но если соблазн есть, то всегда найдутся те, кто ему уступит. Как мне кажется, в таких случаях программисты просто перекладывают ответственность с себя на пользователя. Типа, на вот тебе конструктор, что захочешь, то и наваяешь. И наваяют, наблюдались прецеденты, Россия, по крайней мере, "сильными" особями не обделена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2007, 00:17 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Сахават ЮсифовВо всех этих вопросах проскальзывает одно желание - не возиться с переделкой БД. Забавно :-) А надо было переделывать? Спор, вроде, теоретический..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2007, 00:19 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
2 ChA: +1 ЗЫ Непонятен только напор "апологетов" ))))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2007, 00:31 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
egorych2 ChA: +1 ЗЫ Непонятен только напор "апологетов" ))))))) Когда будете жить только на средства вырученные от продаж и обслуживания своих программ будет понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2007, 00:56 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Жесть! а я на какие средства живу, интересно? ну Вы, блин, даёте! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2007, 01:07 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Сахават ЮсифовВо всех этих вопросах проскальзывает одно желание - не возиться с переделкой БД. Проскальзывает навязчивая идея.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2007, 08:40 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
egorychЖесть! а я на какие средства живу, интересно? ну Вы, блин, даёте! Откуда я знаю? Вы кто, свободный художник? Наемник? Если последнее, то я не считаю, что Вы живете ... Это Ваш хозяин живет от продаж и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2007, 10:23 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Сахават ЮсифовОткуда я знаю? ... Вот именно, не знаете ... Замутим тему "обсуди коллегу"? Таким образом дошли уже до аргумента "мал ещё, дорастёшь - поймёшь", следующий пункт маршрута - "сам дурак?" доказательная база расширяется стремительно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2007, 10:46 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Вы забыли еще один важный аспект - если справочники в одной таблице и нужно, чтобы пользователь Вася видел только один набор справочников, а Петя - другой, то что в этом случае делать??? В случае "Один справочник - Одна таблица" все решается на уровне БД: раздал нужные гранты и спи спокойно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2007, 10:54 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
hammersmithВы забыли еще один важный аспект Я бы не назвал этот аспект важным. Во-первых, это обычная row-level security, ничего военного. Во-вторых, ситуация "пользователь А не должен видеть тривиального справочника Б" исчезающе редка. Подчеркну - речь не идет о справочнике клиентов, оргструктуре предприятия и прочем "явно неоднотипном", речь о куда более простых и в общем общеизвестных данных. И наконец, куда чаще задача доступа оказывается не в "запретить доступ к справочнику", а "разрешить видеть только некоторые позиции справочника", то есть опять-таки row-level security. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2007, 11:20 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Суть вопроса - 1. надо ли создавать так называемые справочники-классификаторы ввиде жестких таблиц БД (одна или много не имеет значения)? 2. Как совместить в таких справочниках "носки" с "топор"? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2007, 11:25 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Сахават ЮсифовСуть вопроса - 1. надо ли создавать так называемые справочники-классификаторы ввиде жестких таблиц БД (одна или много не имеет значения)? Зависит от того, что вы собираетесь там хранить. Если названия типов улиц - то почему бы и нет. Сахават Юсифов2. Как совместить в таких справочниках "носки" с "топор"? :) Просто! Код: plaintext 1. Или вы опять о каком-то своем хитро вымученном классификаторе к которому потом будете прикручивать кучу немерянной функциональности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2007, 11:37 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Bely Или вы опять о каком-то своем хитро вымученном классификаторе к которому потом будете прикручивать кучу немерянной функциональности? Угу. :) Из 30 летнего опыта - любая программа с жизненным циклом больше 3 лет потихоночку движется в направлении объектной кучи и внешних классификаторов. к 7-10 году она полнофункциональна, избыточна и ,к сожалению, мертва. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2007, 11:48 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarerПопробуйте что ли прочитать тему. Хотя бы первое письмо, если уж на большее сил не хватает. Могу только посоветовать Вам сделать тоже самое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2007, 12:14 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Сахават ЮсифовИз 30 летнего опыта - любая программа с жизненным циклом больше 3 лет потихоночку движется в направлении объектной кучи и внешних классификаторов. к 7-10 году она полнофункциональна, избыточна и ,к сожалению, мертва. :( Если она изначально не сделана как безразмерная объектная классифицируемая куча. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2007, 12:33 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
мод Сахават ЮсифовИз 30 летнего опыта - любая программа с жизненным циклом больше 3 лет потихоночку движется в направлении объектной кучи и внешних классификаторов. к 7-10 году она полнофункциональна, избыточна и ,к сожалению, мертва. :( Если она изначально не сделана как безразмерная объектная классифицируемая куча. Хорошо хоть Вы есть. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2007, 12:35 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Сахават ЮсифовСуть вопроса - 1. надо ли создавать так называемые справочники-классификаторы ввиде жестких таблиц БД (одна или много не имеет значения)? 2. Как совместить в таких справочниках "носки" с "топор"? :) Картина такая: "носки" и "топор" - это товары - справочник Товары со своей оригинальной (по отношению к другим справочникам) структурой. Структура справочников определяется пользователем и автоматом отображается на жесткую структуру БД. Но "носки" - это одежда, а "топор" - инструмент. Одежда и инструмент - элементы классификатора Вид товара. Набор классификаторов определяется тоже пользователем. Их иерархическая структура фиксирована. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2007, 14:21 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
мод Сахават ЮсифовСуть вопроса - 1. надо ли создавать так называемые справочники-классификаторы ввиде жестких таблиц БД (одна или много не имеет значения)? 2. Как совместить в таких справочниках "носки" с "топор"? :) Картина такая: "носки" и "топор" - это товары - справочник Товары со своей оригинальной (по отношению к другим справочникам) структурой. Структура справочников определяется пользователем и автоматом отображается на жесткую структуру БД. Но "носки" - это одежда, а "топор" - инструмент. Одежда и инструмент - элементы классификатора Вид товара. Набор классификаторов определяется тоже пользователем. Их иерархическая структура фиксирована. Я вопросов то не задавал. :) Хотя приятно получить хорошие ответы. Кстати, справочники - тоже классификаторы. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2007, 15:05 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarer OraNew2007Не могли бы вы подробнее аргументировать какие минусы хранения простых справочников в одной таблице, какие плюсы при создании множества простых таблиц-справочников именно для Oracle. Спасибо. Oracle вряд ли отличается здесь от других сходных СУБД. Аргументация следующая: 1. Объединение не дает никаких преимуществ. Операций "над всеми справочниками скопом", скажем "значение должно быть уникально среди всех записей всех справочников" практически не встречается. Клиентский код типа "редактирование любого справочника" пишется без каких-либо проблем. 2. При ссылке на "объединенный справочник" возникает опасность сослаться на запись другой категории - скажем, в поле "id валюты" внести id записи "Ботинки 46-го размера". Избавиться от этого эффекта можно только денормализацией и составным внешним ключом, включающим id категории. А такое решение - мусор и большие накладные расходы. 3. Осложняется реализация всех прочих бизнес-правил, относящихся к справочникам. Скажем, "код валюты" должен быть написан большими буквами и состоять из трех знаков, а "название категории" может быть длинным, но первая буква обязана быть заглавной, остальные неважно - и вот это вкупе с еще десятком вариантов относится к одному полю. 4. В любой код, работающий с "объединенным справочником", нужно не забывать добавлять фильтр по категории или напротив, заполнение поля категория. Можно уверенно утверждать, что если не использовать вспомогательных средств (например, view with check option), где-то такие проверки будут забыты. А если использовать - возникает вопрос, нафига эта общая таблица, если работаем с "отдельными". 5. Добавление новых полей и вообще изменение требований к конкретному справочнику повиснет дамокловым мечом, геморроем в каждом случае. Скажем, представьте себе, что один справочник нужно насадить на временную ось (добавить поля date_from - date_to со смыслом "в такой-то интервал времени название было таким-то), а другие - оставить как есть. 6. C точки зрения производительности объединенный справочник - скорее плох. Потребуется собирать гистограммы по всем полям внешних ключей и в общем - дополнительный геморрой, возникающий из-за искусственно внесенного в данные перекоса. Здравствуйте уважаемый softwarer! Мне захотелось по этому поводу привести один пример. Я в принципе согласен со всеми перечисленными доводами, и сам почти всегда так делаю. Но почему Microsoft использует таблицу sysobjects в SQL Server 2000, в которой хранятся разнотипные объекты, такие как таблицы, первичные ключи, ограничения уникальности, пользовательские функции, хранимые процедуры и т.д. ? Ведь так в СИСТЕМНЫХ таблицах теоретически могут появиться неверные ссылки, например вместо ссылки на хранимую процедуру будет ссылка на первичный ключ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 14:56 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
RMihНо почему Microsoft использует таблицу sysobjects в SQL Server 2000, в которой хранятся разнотипные объекты, такие как таблицы, первичные ключи, ограничения уникальности, пользовательские функции, хранимые процедуры и т.д. ? Ведь так в СИСТЕМНЫХ таблицах теоретически могут появиться неверные ссылки, например вместо ссылки на хранимую процедуру будет ссылка на первичный ключ.1. Например, для того, чтобы гарантировать, что в базе не появится 2 разных объекта с двумя одинаковыми именами. Например индекс ТТ1 и таблица ТТ1. 2. SQL сервер, это не совсем приложение, которое работает с БД. Это сама БД. И если лазать в системных словарях руками (а не через сервер), то чудес может быть больше чем ожидается. Сам же сервер - лазает правильно и является гарантом того, что ничего лишнего не появяится (как президент). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 15:12 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
RMihНо почему Microsoft использует таблицу sysobjects в SQL Server 2000, в которой хранятся разнотипные объекты, .... Вряд ли я смогу гарантированно правильно ответить на вопрос "какими именно соображениями руководствовался Microsoft", тем более что я не помню точного содержимого этой таблицы. Выскажу несколько соображений "на тему". 1. Это таки не "совсем несвязанные справочники", вполне реальны операции, общие для всех или многих из указанных типов, вполне возможны ссылки на "один из нескольких типов". Скажем, если в некотором внутреннем представлении оператора select фигурирует нечто со смыслом [SELECT * FROM <object_id=10>], этот самый object_id может ссылаться и на таблицу, и на представление, и на хранимку. 2. В ядрах таких вот "давних и старых проектов" по естественным причинам продолжают жить подходы, которые были нормальными в те времена, когда велась разработка первых версий, но малоудачные с сегодняшней точки зрения. 3. Это в общем-то не обычная SQL-таблица, похожая на таблицы в приложениях. Скажем, вряд ли кто-нибудь и когда-нибудь использует к ней update по многим записям. Да и массовые селекты к ней - третьестепенная функция. Это скорее "объектная таблица" в том виде, в котором они присутствуют в ООСУБД. Если Вас утешит, в Oracle использован другой подход - таблицы, представления, процедуры и все прочее описывается в различных системных таблицах. Сходу я могу вспомнить только одно "совмещение" - в таблице USER$ хранятся как пользователи, так и роли (впрочем, согласитесь, это действительно очень близкие понятия). RMihВедь так в СИСТЕМНЫХ таблицах теоретически могут появиться неверные ссылки, например вместо ссылки на хранимую процедуру будет ссылка на первичный ключ. С практической точки зрения стоит думать о вероятности. Скажем, работая с хранилищами данных, я не испытывал большого стыда, отключая на production большинство ограничений целостности, хотя для обычных OLTP-систем я бы крайне не рекомендовал такой подход. Причина - обновление данных производится только и исключительно ETL-процессом, написанном единомоментно, тестируемом целиком и весьма тщательно, довольно небольшим по коду и обвешанным теми же проверками. Я мог не опасаться, что кто-то другой напишет процедуру, которая лезет править данные и портит их. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 15:35 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarerЕсли Вас утешит, в Oracle использован другой подход - таблицы, представления, процедуры и все прочее описывается в различных системных таблицах. Как насчет ALL_OBJECTS ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 16:40 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Bely softwarerЕсли Вас утешит, в Oracle использован другой подход - таблицы, представления, процедуры и все прочее описывается в различных системных таблицах. Как насчет ALL_OBJECTS ? Как? Да очень просто.... Код: plaintext 1. 2. 3. 4. 5. Неужели это новость? Тут уж если спрашивать, можно было бы спросить про табличку SYS.OBJ$. Она действительно общая для всех объектов, но в ней лежат по сути только заголовки, общий минимум информации - типа id-name-status - а основная часть информации размещается в SYS.TAB$, SYS.VIEW$ и так далее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 17:06 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarerТут уж если спрашивать, можно было бы спросить про табличку SYS.OBJ$. Она действительно общая для всех объектов, но в ней лежат по сути только заголовки, общий минимум информации - типа id-name-status - а основная часть информации размещается в SYS.TAB$, SYS.VIEW$ и так далее. Гы гы гы, тогда можно сказать что в случее SUBJ мы храним в таблице simples_list : id, тип, наименование. А все остальное в DICT_STREET_TYPE... ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 17:23 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
P.S. Шутка конечно, но на мой взгляд оба подхода равнозначны, обладая своими плюсами и минусами. Уж по крайней мере смысла в переделке из одного варианта в другой никакого нет. А обсуждение из серии "А стоит ли писать в коде имя переменной с большой буквы" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 17:28 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Estets softwarerТут уж если спрашивать, можно было бы спросить про табличку SYS.OBJ$. Она действительно общая для всех объектов, но в ней лежат по сути только заголовки, общий минимум информации - типа id-name-status - а основная часть информации размещается в SYS.TAB$, SYS.VIEW$ и так далее. Гы гы гы, тогда можно сказать что в случее SUBJ мы храним в таблице simples_list : id, тип, наименование. А все остальное в DICT_STREET_TYPE... ;-)Ничего подобного - сказать можно, но это совсем другая структура и другой смысл. Как насчет вот этого? Bely1. Например, для того, чтобы гарантировать, что в базе не появится 2 разных объекта с двумя одинаковыми именами. Например индекс ТТ1 и таблица ТТ1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 17:28 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
EstetsГы гы гы, тогда можно сказать что в случее SUBJ мы храним в таблице simples_list : id, тип, наименование. А все остальное в DICT_STREET_TYPE... ;-) Против такого подхода в случае subj я и не собираюсь возражать, сам иногда использую. Правда, в случае справочников не стал бы - геморроя больше, чем выгоды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 18:12 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
EstetsP.S. Шутка конечно, но на мой взгляд оба подхода равнозначны, обладая своими плюсами и минусами. Не смешивайте понятия "равнозначны" и "обладая своими плюсами и минусами". Также - не смешивайте "снежинку" из стержневой таблицы с расширениями с архитектурой "все в одном" - это разные вещи, опять же, обладающие своими плюсами и минусами. Estets Уж по крайней мере смысла в переделке из одного варианта в другой никакого нет. Эта мысль далее всего от истины. Смысл переделки в том, чтобы избавиться от существенно мешающих в данном конкретном случае минусов одного варианта и добиться существенно помогающих в данном конкретном случае плюсов другого варианта. Чтобы проиллюстрировать.... скажем, с давних времен известно два подхода к оптимизации - "по скорости выполнения" и "по потребляемой памяти". Дык вот, Ваша фраза аналогична фразе "нет никакого смысла менять один подход к оптимизации на другой". Наконец, что касается именно архитектуры "все в одном" в случае именно таблиц-справочников в БД, "помогающие плюсы" практически отсутствуют (в топике не было названо ни одного), "мешающие минусы" я назвал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 18:17 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarerНаконец, что касается именно архитектуры "все в одном" в случае именно таблиц-справочников в БД, "помогающие плюсы" практически отсутствуют (в топике не было названо ни одного) Уже было, но повторюсь: универсальная программа подхватит появление нового раздела в одной таблице, а вот пояление новой таблицы можно подхватить только динамическим SQL со всеми вытекающими. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 14:05 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
модУже было, но повторюсь: универсальная программа Где такие есть? ДАЙТЕ ДВЕ!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 14:12 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
мод softwarer...в случае именно таблиц-справочников... ...универсальная программа подхватит появление нового раздела в одной таблице... Если это всего лишь новый раздел (справочника) - так ему там и место (в той же таблице). А вот если это новый справочник, новое "измерение" - с соотв.связями в таблицах "фактов", с соотв.элементами GUI, с соотв.ограничениями на значения, соотв.кусками кода и т.д., то трудно представить насколько "универсальной" должна быть такая программа... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 14:43 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
модУже было, но повторюсь: универсальная программа подхватит появление нового раздела в одной таблице, а вот пояление новой таблицы можно подхватить только динамическим SQL со всеми вытекающими. Напугали ежа голым задом :) В данном случае уместно посмотреть на такую категорию универсальных программ, как СУБД - тем паче, что только что обсуждали конструкцию системных таблиц. Вот уж кто легко мог бы реализовать такой вот "универсальный подход с появлением нового раздела в таблице", вместе со всеми EAV - ан нет, почему-то их "динамический sql" ну совершенно не пугает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 14:44 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
мод Уже было, но повторюсь: универсальная программа подхватит появление нового раздела в одной таблице, а вот пояление новой таблицы можно подхватить только динамическим SQL со всеми вытекающими. И вновь продолжается бой Особенно здорово будет, если этот новый раздел должен по-разному обрабатываться для разных категорий, или он не будет иметь смысла для некоторых категорий, или ... - можно долго продолжать список, общее здесь - для универсальной программы всё одно придётся прикручивать новые правила для обработки/отображения этого нового раздела. И всё равно придётся вносить изменения в код такой универсальной программы - найдите, что называется, 7 отличий... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 16:08 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarerНапугали ежа голым задом :) В данном случае уместно посмотреть на такую категорию универсальных программ, как СУБД Кота сметаной :). Уровни разные: СУБД и ее прикладнуха. Теоретически действительно можно все сделать на динамических sql, но на практике это довольно не просто, не говоря уж о производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 17:28 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
egorychОсобенно здорово будет, если ..... А если не будет ? Предполагать можно что угодно, а на практике подход оказывается полезным, вот вам и критерий истины. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 17:36 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
модУровни разные: СУБД и ее прикладнуха. Именно что разные. Для СУБД такие вот "разнообразные таблицы" - основная функциональность, а не третьестепенная функция. Производители СУБД имеют возможность протестировать свое решение куда лучше, чем производители прикладного софта. Производители СУБД уверены, что даже если кто-то и полезет в эти таблицы грязными руками, техподдержка пошлет его в пешее эротическое. И все равно почему-то не делают. А авторы прикладух, видимо, храбрее :) модТеоретически действительно можно все сделать на динамических sql, Во-первых, не надо про "все", от "всего" в обсуждаемой теме справочников и одного процента не наберется. модно на практике это довольно не просто, Да бросьте. Код: plaintext 1. 2. 3. модне говоря уж о производительности. А что говорить о том, что не меняется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 18:42 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
мод egorychОсобенно здорово будет, если ..... А если не будет ?... Т.е. универсальность всё-же какая-то однобокая получилась. Тут может, тут не может, тут рыбу заворачивали ))) модПредполагать можно что угодно, а на практике подход оказывается полезным, вот вам и критерий истины. Есть такой момент, Вы правы ))) - просто у меня, видимо, практика другая была. И она, практика эта, говорит мне, что если всё в кучу сложить, то потом кучу эту всё-же придётся разбирать. Не разработчику, так сопровождающему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 23:03 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarer Для СУБД такие вот "разнообразные таблицы" - основная функциональность Как раз СУБД хранит все данные в своих внутренних фиксированных структурах. softwarer от "всего" в обсуждаемой теме справочников и одного процента не наберется. А причем тут справочники, речь о подходе. softwarerДа бросьте. Для языков типа делфи динамический sql это нормально, но я не пишу на делфи и динамический sql использую только для динамических вычислений. Пока меня это устраивает, пользователей тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2007, 12:09 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
мод softwarer Для СУБД такие вот "разнообразные таблицы" - основная функциональность Как раз СУБД хранит все данные в своих внутренних фиксированных структурах. В своих внутренних динамических структурах. модА причем тут справочники, речь о подходе. Справочники при том, что это основная заданная тема. Что касается "подхода во всей широте", то говорить об универсальной программе, которая подхватит заданную структуру данных можно (хотя далеко не факт, что стоит), однако рассуждать при этом о трудностях динамического кодирования - напомню, это тот Ваш аргумент, который мы обсуждаем - просто смешно. мод softwarerДа бросьте. Для языков типа делфи динамический sql это нормально, но я не пишу на делфи Вот и не надо выдвигать как общее правило - "будет непросто" - то, что верно для редкого частного случая используемого Вами инструмента. Более того, я твердо уверен в том, что технология должна влиять на выбор инструмента, а не наоборот - иначе говоря, если Вам нужны "динамические таблицы", надо выбрать инструмент, который может с ними нормально работать, а не корежить архитектуру под недостатки инструмента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2007, 12:20 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarer EstetsP.S. Шутка конечно, но на мой взгляд оба подхода равнозначны, обладая своими плюсами и минусами. Не смешивайте понятия "равнозначны" и "обладая своими плюсами и минусами". Также - не смешивайте "снежинку" из стержневой таблицы с расширениями с архитектурой "все в одном" - это разные вещи, опять же, обладающие своими плюсами и минусами. Одним из минусов "однотабличного" подхода для хранения однотипных справочников было названо сложность по расширению функционала в случае если одному из типов потребуются дополнительные поля. Соответственно "снежинка" решает данный вопрос и не требует переделки SELECT-ов в случае если там используются только поля ID-наименование. softwarer Estets Уж по крайней мере смысла в переделке из одного варианта в другой никакого нет. Эта мысль далее всего от истины. Смысл переделки в том, чтобы избавиться от существенно мешающих в данном конкретном случае минусов одного варианта и добиться существенно помогающих в данном конкретном случае плюсов другого варианта. Это было высказано на случай нахождения на данном форуме "горячих голов", которые бросятся тут же исправлять логику работающих программ. ИМХО не стоит этого делать, так как практически ни в одном случае плюсы любого из двух подходов не правышают затрат на переделку. softwarer Наконец, что касается именно архитектуры "все в одном" в случае именно таблиц-справочников в БД, "помогающие плюсы" практически отсутствуют (в топике не было названо ни одного), "мешающие минусы" я назвал. Гм, тогда исправим данное упушение. Плюсы универсального подхода: 1) Универсальность интерфейсной части, легкость внесения разработчиком и изменения пользователем значений и наименований "простых справочников", одно окно интерфейса. 2) Простота глобальных доработок, пример, у нас данные справочники широко использовались в отчетности, (начиная от типов счетов активный/пассивный, до подтипов биржевых сделок). Соответственно когда возникла необходимость продублировать отчеты на английском языке было добавлено поле "наименоване на английском" во все справочники, а в нужных типах пользователями были проставлены переводы. Аналогично была решена проблема расширения поля наименования до 255 символов. Несколько натянутый пример конечно, но отражающий простоту внесения изменений. 3) Простота реализации Row-level доступов в справочникам, в случае если такой доступ необходим. Как с точки зрения настройки допусков к одной таблице, так и простоты реализации интерфейса настройки. Минусы подхода 1 справочник - 1 таблица: 1) Разработка серверной и интерфейсной части под каждый новый справочник. Не будем бить себя в грудь утверждая что это занимает мало времени, в случае универсального интерфейса надо вбить 1 строчку в список типов простых справочников с новым кодом и наименованием и все. 2) Поддержка серверной и клиентской части. У нас зарегистрировано в системе 190 типов простых справочников. Это 1 таблица и 4 процедуры на Select, Ins, Upd, Del. В клиентской части это 1 пункт меню список с фильтром и вызываемый из списка редактор. Соответственно для подхода "1х1" это 190 таблиц и 760 процедур в серверной части и 190 кнопок/пунктов меню в клиентской. Выбор за вами ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2007, 12:45 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
EstetsОдним из минусов "однотабличного" подхода для хранения однотипных справочников было названо сложность по расширению функционала в случае если одному из типов потребуются дополнительные поля. Нет. Никакой сложности в этом нет. Есть уродство и возникающие проблемы. EstetsСоответственно "снежинка" решает данный вопрос Решает. Причем так, что возникает вопрос - а нафига теперь стержневая таблица :) Estetsи не требует переделки SELECT-ов в случае если там используются только поля ID-наименование. Расширение "одной таблицы" также не потребует изменения SELECT-ов, в которых используются только id-name. Не вижу, к чему этот аргумент. Estets softwarerЭта мысль далее всего от истины. ...... Это было высказано на случай нахождения на данном форуме "горячих голов", которые бросятся тут же исправлять логику работающих программ. ИМХО не стоит этого делать, так как практически ни в одном случае плюсы любого из двух подходов не правышают затрат на переделку. Давайте постараемся оборачивать обращение к горячим головам в более верные утверждения :) Что же по сути Вашего ИМХО, то не имею собственного мнения на этот счет - надо смотреть по месту. EstetsГм, тогда исправим данное упушение. Плюсы универсального подхода: 1) Универсальность интерфейсной части, легкость внесения разработчиком и изменения пользователем значений и наименований "простых справочников", одно окно интерфейса. Госсподи, опять. Ну кто, кто мешает Вам применить "одно окно интерфейса" для нескольких таблиц? В чем разница? Этот аргумент выглядит примерно так же, как аргумент программиста, разработавшего три одинаковых фунции - "но ведь в одном случае результат нужно присваивать в переменную i, в другом - в переменную j, а в третьем - в переменную k". И затем победоносно избавляющегося от двух функций ценой присваивания всегда в одну переменную. EstetsНесколько натянутый пример конечно, но отражающий простоту внесения изменений. Он отражает простоту, одинаковую для одной таблицы и для нескольких таблиц. См. выше. Estets3) Простота реализации Row-level доступов в справочникам, в случае если такой доступ необходим. Как с точки зрения настройки допусков к одной таблице, так и простоты реализации интерфейса настройки. Ну и снова - в чем разница? Особенно в "простоте реализации интерфейса"? Разницу в реализации еще можно заметить - допустим, "несколько одинаковых вьюх вместо одной". EstetsМинусы подхода 1 справочник - 1 таблица: 1) Разработка серверной и интерфейсной части под каждый новый справочник. Госсподи. Ну если рисуете каждый раз заново, то начинать надо вовсе не с дизайна БД. Estets2) Поддержка серверной и клиентской части. У нас зарегистрировано в системе 190 типов простых справочников. Это 1 таблица и 4 процедуры на Select, Ins, Upd, Del. В клиентской части это 1 пункт меню список с фильтром и вызываемый из списка редактор. Соответственно для подхода "1х1" это 190 таблиц и 760 процедур в серверной части и 190 кнопок/пунктов меню в клиентской. Этот аргумент выглядит столь замечательно, что я цитирую его целиком. Тема замечательно соответствует недавно отгремевшей войне на тему многозвенного мышления и привычки многих не понимать разницы между структурой данных и отображением этих данных в интерфейсе. Итак, Вы умеете отобразить "справочник категорий" в комбобоксе (или чем там), и, видимо, не умеете отобразить его же в виде ста девяноста пунктов меню. Вы умеете отобразить "справочник таблиц" в виде ста девяноста пунктов меню и не умеете отобразить его же в виде комбобокса (или чего там). И как результат, интерфейс ввода является аргументом при выборе структуры данных. Бесподобно. Я бы даже сказал, феноменально логично. Попутно Вы признаетесь в привычке генерить по каждому случаю идиотские хранимки. И это тоже идет как аргумент при выборе структуры данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2007, 13:44 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarerПопутно Вы признаетесь в привычке генерить по каждому случаю идиотские хранимки. И это тоже идет как аргумент при выборе структуры данных.Лично я здесь не вижу ничего такого. Я могу признаться, что для каждой таблицы я генерю "идиотские" триггера и сиквенсы, которые: - Вставляют ID из последовательности - Выставляют автоматом дату создания и дату модификации записи - Записывает USER_ID создателя и кто обновлял последний раз - запрещают изменять ID записи Существенно уникальные триггера - встречаются гораздо реже, чем вот такие типовые. Лично я расцениваю трудозатраты на эту часть работы - как некоторое неудобство в случае с большим кол-вом таблиц, нежели как существенный аргумент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2007, 14:22 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
BelyЯ могу признаться, что для каждой таблицы я генерю "идиотские" триггера и сиквенсы, которые: Во-первых, не путайте триггера с хранимками. Во-вторых... Bely - Вставляют ID из последовательности Отказался из соображений производительности. Лучше явно закодировать nextval в паре мест. Bely - Выставляют автоматом дату создания и дату модификации записи - Записывает USER_ID создателя и кто обновлял последний раз Во-первых, откройте для себя default sysdate/user. Во-вторых, когда-то я работал с таким аудитом, но так и не понял прелести - поскольку нафиг теряется информация "кто предпоследний"... Тут уж если делать, то полностью. Bely - запрещают изменять ID записи Хм. А нафига? Хотя в принципе можно - если повесить триггер on update when (old.id <> new.id), тот не будет заметно тормозить. BelyСущественно уникальные триггера - встречаются гораздо реже, чем вот такие типовые. В последнее время в том, что делаю я, редко встречаются "существенно уникальные триггера" и вообще не встречается других. BelyЛично я расцениваю трудозатраты на эту часть работы - как некоторое неудобство в случае с большим кол-вом таблиц, нежели как существенный аргумент. Я не считаю этот аргумент существенным, но более потому, что сама по себе привычка генерить прорву кода есть "тревожный звоночек". А в том, что касается автогенерации CRUD (о которых говорил Estets), так и скорее о болезни головы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2007, 15:11 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Скипнуто несколько общих рассуждений ;) softwarer EstetsГм, тогда исправим данное упушение. Плюсы универсального подхода: 1) Универсальность интерфейсной части, легкость внесения разработчиком и изменения пользователем значений и наименований "простых справочников", одно окно интерфейса. Госсподи, опять. Ну кто, кто мешает Вам применить "одно окно интерфейса" для нескольких таблиц? В чем разница? Разница в построении и отладке интерфейса с 1 (одним) папаметризированным запросом. И интерфейса по обработке 190 запросов по условно одинаковым таблицам. Вероятност забыть чно на 130-ой таблице добавили триггерное ограничение а 140-ую кто то добавил мандатори поле без дефолтного значения. Нет ничего невозможного при неограниченном бюджете и людских ресурсах. softwarer EstetsНесколько натянутый пример конечно, но отражающий простоту внесения изменений. Он отражает простоту, одинаковую для одной таблицы и для нескольких таблиц. См. выше. См. выше, отладка занимает в 190 раз больше времени, а так конечно совершенно аналогично. softwarer Estets3) Простота реализации Row-level доступов в справочникам, в случае если такой доступ необходим. Как с точки зрения настройки допусков к одной таблице, так и простоты реализации интерфейса настройки. Ну и снова - в чем разница? Особенно в "простоте реализации интерфейса"? Что такое интерфайс к Row-level допускам - матрица по вертикали значения из таблицы по горизонтали роли(пользователи) и галочки на пересечениях. Разница в выборе значений из одной или N таблиц, часть из которых могут добавляться удаляться в процессе работы. softwarer EstetsМинусы подхода 1 справочник - 1 таблица: 1) Разработка серверной и интерфейсной части под каждый новый справочник. Госсподи. Ну если рисуете каждый раз заново, то начинать надо вовсе не с дизайна БД. Разработка интерфейса для "автоматического рисования по примеру" требует хоть разовых но достаточных человеческих затрат, плюс все равно это будет дольше, чем добавить 1 (одну) строчку в таблицу. Это похоже на програмиста который хвалится написанным макросом для копирования функции возвращающей результат в переменную X в фунуцию возвращающую значение в переменную Y, пусть и в два клика а смысл? softwarer Estets2) Поддержка серверной и клиентской части. У нас зарегистрировано в системе 190 типов простых справочников. Это 1 таблица и 4 процедуры на Select, Ins, Upd, Del. В клиентской части это 1 пункт меню список с фильтром и вызываемый из списка редактор. Соответственно для подхода "1х1" это 190 таблиц и 760 процедур в серверной части и 190 кнопок/пунктов меню в клиентской. Этот аргумент выглядит столь замечательно, что я цитирую его целиком. Тема замечательно соответствует недавно отгремевшей войне на тему многозвенного мышления и привычки многих не понимать разницы между структурой данных и отображением этих данных в интерфейсе. Итак, Вы умеете отобразить "справочник категорий" в комбобоксе (или чем там), и, видимо, не умеете отобразить его же в виде ста девяноста пунктов меню. Вы умеете отобразить "справочник таблиц" в виде ста девяноста пунктов меню и не умеете отобразить его же в виде комбобокса (или чего там). И как результат, интерфейс ввода является аргументом при выборе структуры данных. Бесподобно. Я бы даже сказал, феноменально логично. Не откажусь и я от удовольствия процитировать и ваш ответ целиком. Я не занимаюсь теоретическими размышлениями, не участвую в войнах и не пишу классические трехзвенные приложения. При разработке приложений я обращаю внимание на два основных требования это: 1. Удобство для конечного пользователя 2. Скорость разработки приложения Поскольку данные требования часто противоречат друг другу то приходится искать баланс. Рассмотрим данный пример: Имея "справочник категорий" очень легко построить "комбобокс" или ДропДаунЛистБокс для выбора нужных категорий. С этим я надеюсь вы согласны? Это удобно пользователю и не требует затрат на программирование. Раздел главного меню с 190-та позициями создать можно, но в связи с отсутствием поиска этот вариант отпадает так как противоречит пункту "Удобство". Имея 190 таблиц справочников мы можем распределить вызовы справочников по соответствующим разделам меню, что вообщем удобно т.к. разные группы пользователей используют разные наборы справочников и логично видеть справочник "типы сделок" рядом с "списком сделок", то тут противоречие с пунктом "Скорость разработки" на создание и поддержание меню в актуальном состоянии. Можем создать одно окно и ДропДаунЛистБокс для выбора, но тогда мы столкнемся с необходимостью вести "мета-справочник справочников" где будет храниться информация по справочникам системы и таблицам где они расположены. И опять мы наталкиваемся на необходимость синхронизации физических таблиц с метасправочником + динамические запросы на редактирование разных таблиц. Что противоречит пункту "Скорость разработки" Вообщем я никого не убеждаю, что данный подход лучше, но не стоит заявлять категорически "Я вижу только минусы и не вижу плюсов". softwarer Попутно Вы признаетесь в привычке генерить по каждому случаю идиотские хранимки. И это тоже идет как аргумент при выборе структуры данных. В данном случае "генерить идиотские хранимки" было частью технического задания на разработку приложения и было установлено заказчиком, для реализации расширенной безопасности в том числе и Row-level. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2007, 15:17 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarer Bely - Выставляют автоматом дату создания и дату модификации записи - Записывает USER_ID создателя и кто обновлял последний раз Во-первых, откройте для себя default sysdate/user. Во-вторых, когда-то я работал с таким аудитом, но так и не понял прелести - поскольку нафиг теряется информация "кто предпоследний"... Тут уж если делать, то полностью.А если полностью - то он у вас не на триггерах будет? И для каждой таблицы триггера разные писать или опять типовой? Подозреваю, что типовой - а значит опять скатываемся к генерации типового триггера. Только с другой функциональностью. Про пользователя - он у нас не ORACLE USER - он "пользователь системы". USER_ID сохраняется в контексте сессии и записывается туда программами. Так что DEFAULT VALUE - не проходит. Да и дату обновления туда не запишешь. softwarer BelyСущественно уникальные триггера - встречаются гораздо реже, чем вот такие типовые. В последнее время в том, что делаю я, редко встречаются "существенно уникальные триггера" и вообще не встречается других. Сам же говорил, что это "личные проблемы" Если кто-то что-то не использует, то это не значит что такого в жизни нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2007, 15:43 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
EstetsСкипнуто несколько общих рассуждений ;) То есть Вы с ними согласны? EstetsРазница в построении и отладке интерфейса с 1 (одним) папаметризированным запросом. И интерфейса по обработке 190 запросов по условно одинаковым таблицам. Вероятност забыть чно на 130-ой таблице добавили триггерное ограничение а 140-ую кто то добавил мандатори поле без дефолтного значения. Названные вероятности абсолютно равны вероятности того, что на единственную таблицу добавили триггер, срабатывающий только для 130-й и 140-й категорий соответственно. Разницы по-прежнему не видно. EstetsНет ничего невозможного при неограниченном бюджете и людских ресурсах. Вы это про поддержку 190 справочников в одной таблице? В общем, верно.. EstetsСм. выше, отладка занимает в 190 раз больше времени, Заблуждение мягко переходит в состояние, характеризующееся более сильными терминами. EstetsЧто такое интерфайс к Row-level допускам - матрица по вертикали значения из таблицы по горизонтали роли(пользователи) и галочки на пересечениях. Именно так. EstetsРазница в выборе значений из одной или N таблиц, часть из которых могут добавляться удаляться в процессе работы. Так в чем разница-то? Давайте рассмотрим реализацию. В случае одной таблицы: 1. DBComboBox, заполняемый из справочника категорий. 2. Детальный к нему датасет с селектом, фильтруемым значением комбобокса (where category_name = :category_name) 3. Обработка кликов, выливающаяся в UpdateSQL. В случае разных таблиц: 1. DBComboBox, заполняемый из справочника таблиц 2. Детальный к нему датасет с селектом (from &TableName) 3. Обработка кликов, выливающаяся в UpdateSQL. Ни одной! строки разницы в реализации. EstetsРазработка интерфейса для "автоматического рисования по примеру" Еще раз: если не умеете делать - не говорите, что этого нельзя сделать. На любом нормальном инструменте можно написать одну форму, редактирующую указанную из множества однотипных таблиц. Без всякой дополнительной трудоемкости. Трудоемкость регистрации нового справочника - внесение одной строки в таблицу. Если используемый Вами инструмент так не умеет.... хм, я бы всерьез задумался, нафига он мне нужен. EstetsЭто похоже на програмиста который хвалится написанным макросом для копирования функции возвращающей результат в переменную X в фунуцию возвращающую значение в переменную Y, пусть и в два клика а смысл? Если это единственный способ, который Вы представляете для решения задачи "возвращать результат функции в указанную переменную...." EstetsПри разработке приложений я обращаю внимание на два основных требования это: 1. Удобство для конечного пользователя 2. Скорость разработки приложения Поскольку данные требования часто противоречат друг другу то приходится искать баланс. EstetsИмея "справочник категорий" очень легко построить "комбобокс" или ДропДаунЛистБокс для выбора нужных категорий. С этим я надеюсь вы согласны? Имея - легко. Я бы отметил, кстати, что по умолчанию мы его не имеем. Мы имеем только поле "категория" в общем справочнике, а отдельный справочник категорий - можем иметь, можем не иметь, as designed. Разница в том, что например "названия категории" во втором случае у нас не будет, неоткуда. EstetsРаздел главного меню с 190-та позициями создать можно, но в связи с отсутствием поиска этот вариант отпадает так как противоречит пункту "Удобство". Замечательно. Таким образом, когда Вы в предыдущем письме требовали при разных таблицах именно такого интерфейса, Вы пытались завязать вариант "разных таблиц" на заведомо плохое с Вашей же точки зрения интерфейсное решение, дабы оно утопило такую архитектуру - я правильно понимаю? EstetsИмея 190 таблиц справочников мы можем распределить вызовы справочников по соответствующим разделам меню, что вообщем удобно Стоп. А имея 190 категорий - разве не можем? Кто нам мешает? EstetsМожем создать одно окно и ДропДаунЛистБокс для выбора, но тогда мы столкнемся с необходимостью вести "мета-справочник справочников" где будет храниться информация по справочникам системы Стоп-стоп-стоп. Значит, по-Вашему, справочник категорий мы "имеем без всяких усилий", а для справочника таблиц мы "столкнемся с необходимостью и натолкнемся"? Ну-ну. EstetsИ опять мы наталкиваемся на необходимость синхронизации физических таблиц с метасправочником + динамические запросы на редактирование разных таблиц. Что противоречит пункту "Скорость разработки" Второе - многократно опровергнутая чушь, которую Вы продолжаете повторять, причем так и не назвав ни одного аргумента. Такое впечатление, что Вы этого просто никогда не пробовали и боитесь по религиозным соображениям. EstetsВообщем я никого не убеждаю, что данный подход лучше, Да собственно убеждайте, только приводите аргументы, причем сколь возможно объективные. Напишите например - "вот для статического кода мне надо написать <мало кода>, а для динамического придется писать <много кода>, и этого никак не сократишь". Тогда мы увидим, сокращабельно или нет. Впрочем, учитывая, что я уже не раз приводил код, и он ничуть не длиннее, уверен, Вы этого не сделаете. Estetsно не стоит заявлять категорически "Я вижу только минусы и не вижу плюсов". Тем более не стоит лгать. В последнем оживлении мелькнул единственный случай - Oracle Forms, где динамика доставляет проблемы (если я правильно понял). Я не готов считать это плюсом (поскольку, как объяснял, полагаю, что надо выбирать технологию под задачу, а инструмент под технологию, но не наоборот), но по крайней мере это реальность, которую мы можем пощупать и сказать - действительно, сложнее. EstetsВ данном случае "генерить идиотские хранимки" было частью технического задания на разработку приложения и было установлено заказчиком, Замечательно. Итак, это обвинение с Вас снято, но возникает вопрос: почему Вы преподнесли разовый идиотизм заказчика как глобальный недостаток технологии? Полагаете, это корректно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2007, 15:50 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
BelyА если полностью - то он у вас не на триггерах будет? Думаю, нет. BelyПро пользователя - он у нас не ORACLE USER - он "пользователь системы". :( Ну значит SYS_CONTEXT. BelyСам же говорил, что это "личные проблемы" Ну так и отвечает на такие же "личные проблемы", ситуация симметрична. Скажу так: когда-то у меня тоже было море триггеров, но чем больше я работаю, тем меньше их становится. Причем не потому, что они плохи как идея, а потому, что они слишком много тормозят и мешают - и становится лучше выбрать альтернативное решение без триггеров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2007, 16:02 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarerВ своих внутренних динамических структурах. В файлах с постоянной длиной записи-блока. softwarerрассуждать при этом о трудностях динамического кодирования просто смешно./quot] Мне не очень - времени жалко. [quot softwarer] для редкого частного случая используемого Вами инструмента pl/sql - точно экзотика softwarerтехнология должна влиять на выбор инструмента Это верно, и именно по этому pl/sql, а не делфя или с++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2007, 16:10 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
мод softwarerВ своих внутренних динамических структурах. В файлах с постоянной длиной записи-блока. Верно. Вы еще вспомните, что вся информация в компьютерах состоит из записей постоянной длины (1 байт).... И тем не менее, из них складываются динамические структуры. мод softwarer для редкого частного случая используемого Вами инструмента pl/sql - точно экзотика Для кодирования гуя - безусловно. мод softwarerтехнология должна влиять на выбор инструмента Это верно, и именно по этому pl/sql, а не делфя или с++. Получается странная логика рассуждений. Сначала Вы выбираете инструмент, максимально близкий к БД, а затем из-за сложности инструмента лишаете себя существенной части базового функционала БД (вменяемой автоматической поддержки целостности). Выходит что-то типа "все минусы в одном флаконе". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2007, 16:18 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarer EstetsСкипнуто несколько общих рассуждений ;) То есть Вы с ними согласны? Я с ними не согласен, как и с многоми далее, но еще раз повторю я никого не собираюсь переубеждать. Укажу только на две ошибки softwarer EstetsРазработка интерфейса для "автоматического рисования по примеру" Еще раз: если не умеете делать - не говорите, что этого нельзя сделать. На любом нормальном инструменте можно написать одну форму, редактирующую указанную из множества однотипных таблиц. Без всякой дополнительной трудоемкости. Трудоемкость регистрации нового справочника - внесение одной строки в таблицу . Если используемый Вами инструмент так не умеет.... хм, я бы всерьез задумался, нафига он мне нужен. Вы забыли об одной простой вещи, кроме регистрации справочника вам нужно еще эту таблицу создать и раздать права. А это уже требует другого набора прав у пользователя. Если мы конечно даем право пользователю создавать "Простой справочник". Плюс потенциальная проблема с несоответствием полей в новой таблице образцу, если это делает программист. Плюс еще раз повторю проблема синхронизации данных в справочнике списку таблиц. Если вам кажется что в коллективе даже из десятка программистов все точно знают какую таблицу удалили, изменили или переименовали, то вы неисправимый оптимист. softwarer Estetsно не стоит заявлять категорически "Я вижу только минусы и не вижу плюсов". Тем более не стоит лгать. Хорошо, звиняюсь точная цитата была softwarer что касается именно архитектуры "все в одном" в случае именно таблиц-справочников в БД, "помогающие плюсы" практически отсутствуют (в топике не было названо ни одного), "мешающие минусы" я назвал. Категоричное и неверное утверждение. softwarer EstetsВ данном случае "генерить идиотские хранимки" было частью технического задания на разработку приложения и было установлено заказчиком, Замечательно. Итак, это обвинение с Вас снято, но возникает вопрос: почему Вы преподнесли разовый идиотизм заказчика как глобальный недостаток технологии? Полагаете, это корректно? Если Вы считаете требование безопасности "пользователи ни при каких обстоятельствах не имею прямого доступа к таблицам" идиотским, ... softwarer Вы этого просто никогда не пробовали и боитесь по религиозным соображениям. Динамический SQL с клиента закрыт т.к. закрыты таблицы, а за использование динамического SQL на сервере бил по рукам. Можете считать это "религиозными убеждениями" я не против. Слишком много ошибок бывает допущено при написании процедур что бы еще бороться с трудновоспроизводимыми ошибками DynamicSQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2007, 18:01 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
EstetsВы забыли об одной простой вещи, кроме регистрации справочника вам нужно еще эту таблицу создать и раздать права. А это уже требует другого набора прав у пользователя. Если мы конечно даем право пользователю создавать "Простой справочник". Боюсь, Вы потеряли контекст цитаты. В той фразе, на которую я отвечал, Вы говорили про трудоемкость кодирования кучи форм для редактирования кучи справочников - и это, как мы надеюсь согласны, делает не "пользователь". Ответ относится именно к этому - к тому, что при желании тривиально делается одна форма, редактирующая типовые справочники, и вместо всей описанной Вами трудоемкости остается - вставка строки в конфигурационную таблицу. Таким образом, моей ошибки здесь нет. Если хотите обсудить новый аспект - проблемы создания новых таблиц пользователем - welcome. EstetsЕсли вам кажется что в коллективе даже из десятка программистов все точно знают какую таблицу удалили, изменили или переименовали, то вы неисправимый оптимист. Я неисправимый реалист, и поэтому знаю, что в любом приличном коллективе за несанкционированные изменения структуры БД больно бьют ногами, а для санкционированных применяется комплекс мер, как технических, так и организационных, практически исключающие вероятность проблем. Estets softwarerТем более не стоит лгать. Хорошо, звиняюсь точная цитата была Боюсь, Вы меня неправильно поняли. Я нисколько не обвинял Вас; смысл этой фразы - при выборе между "сказать что-нибудь отличное от категоричной цитаты, которая Вам не понравилась" и "сказать правду", второе для меня предпочтительнее. EstetsКатегоричное и неверное утверждение. Категоричное. Верное с точностью до недостатков отдельных инструментальных средств. EstetsЕсли Вы считаете требование безопасности "пользователи ни при каких обстоятельствах не имею прямого доступа к таблицам" идиотским, ... Во-первых, не передергивайте. Из озвученного требования совершенно не следует оправдание генерации идиотских хранимок. Во-вторых, предлагаю не углубляться в обсуждение "пользователи не должны иметь", поскольку это будет большая и отдельная тема. Она неоднократно обсуждалась; если поиска Вам не хватит, создайте соответствующий топик, и я опубликую свое мнение по этому поводу. EstetsДинамический SQL с клиента закрыт т.к. закрыты таблицы, а за использование динамического SQL на сервере бил по рукам. Можете считать это "религиозными убеждениями" я не против. Слишком много ошибок бывает допущено при написании процедур что бы еще бороться с трудновоспроизводимыми ошибками DynamicSQL. Мне это напоминает того моего начальника на заре моей трудовой деятельности, который пришел в ужас, увидев, что я использовал в коде savepoint-ы, и попробовал устроить мне показательную обструкцию с аргументацией "никогда о таком не слышал, и вообще еще неизвестно, работают они или нет". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2007, 19:41 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Господа, Ну вы разошлись... Давно пользую для хранения списков простую структуру из 2-х таблиц Glossary - оглавление ------- Glyid (AutoIncrement) GlyCode (varchar(25)) GlyName (varchar(255)) ... Terms - термины ------ Trmid (AutoIncrement) GlyCode (varchar(25)) TrmCode (varchar(25)) TrmName (varchar(255)) ... в основных таблицах только символьные коды и ни каких Id Проверку, если надо, то в тригер и всё видно, всё понятно не создавайте себе лишних трудностей, а то ещё каждый вид документа начните в отдельную таблицу класть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 03:17 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
EstetsМинусы подхода 1 справочник - 1 таблица: 1) Разработка серверной и интерфейсной части под каждый новый справочник. Не будем бить себя в грудь утверждая что это занимает мало времени, в случае универсального интерфейса надо вбить 1 строчку в список типов простых справочников с новым кодом и наименованием и все. 2) Поддержка серверной и клиентской части. У нас зарегистрировано в системе 190 типов простых справочников. Это 1 таблица и 4 процедуры на Select, Ins, Upd, Del. В клиентской части это 1 пункт меню список с фильтром и вызываемый из списка редактор. Соответственно для подхода "1х1" это 190 таблиц и 760 процедур в серверной части и 190 кнопок/пунктов меню в клиентской. Выбор за вами ;-)Странно слышать подобные слова от PowerBuilder разработчика :-))) Динамическая клиентская часть реализуется от силы парой десятков строк, а тривиальные процедуры, если они так необходимы, можно генерировать автоматически. IMHO возможность гарантировать ссылочную целостность перевешивает любые минусы, связанные с увеличением (зачастую мнимым) трудоемкости разработки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 10:21 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
EstetsМожем создать одно окно и ДропДаунЛистБокс для выбора, но тогда мы столкнемся с необходимостью вести "мета-справочник справочников" где будет храниться информация по справочникам системы и таблицам где они расположены.С этим неплохо справляется любая СУБД. Вам надо всего лишь обратиться к системным таблицам :-) В любом случае вам надо хранить информацию о том, к какому справочнику относится тот или иной набор записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 10:33 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarer Выходит что-то типа "все минусы в одном флаконе". Я бы сказал - и плюсы и минусы. В этом и сложность выбора, а иначе и проблем бы не было. Вы конечно скажите что проблемы и нет, но откуда тогда постоянно возникающие вопросы (на этом же форуме). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 11:19 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Alexander Beznin не создавайте себе лишних трудностей, а то ещё каждый вид документа начните в отдельную таблицу класть... Большинство так и делает :) - результат предсказуем ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 11:23 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
PL99IMHO возможность гарантировать ссылочную целостность перевешивает любые минусы, связанные с увеличением (зачастую мнимым) трудоемкости разработки. IMHO не надо делать из ссылочной целостности идола и приносить ему в жертву функциональность системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 11:26 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Alexander BezninДавно пользую для хранения списков простую структуру из 2-х таблиц ... в основных таблицах только символьные коды и ни каких Id Проверку, если надо, то в тригер и всё видно, всё понятно не создавайте себе лишних трудностей, а то ещё каждый вид документа начните в отдельную таблицу класть...Мда... вы, батенька, экстремал...foreign key придумали трусы Скажите, а у вас никогда не было такого, что кто-то удалил из справочника строку, и теперь непонятно к чему относится запись в основной таблице? И коды никогда не дублировались по недосмотру? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 11:30 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
мод softwarer Выходит что-то типа "все минусы в одном флаконе". Я бы сказал - и плюсы и минусы. В этом и сложность выбора, а иначе и проблем бы не было. Вы конечно скажите что проблемы и нет, но откуда тогда постоянно возникающие вопросы (на этом же форуме).Я могу сказать откуда - от ЛЕНИ. От лени создавать и поддерживать новые объекты в БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 11:32 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
модЯ бы сказал - и плюсы и минусы. В этом и сложность выбора, а иначе и проблем бы не было. Я к сожалению настолько не знаю формсов, что практически не в состоянии обсудить варианты решения этой ситуации с их помощью. Хотя это наверняка возможно - скажем, реализацией динамики в БД. С точки зрения плюсов и минусов..... действительно, получается какой-то тришкин кафтан. Если, как я правильно понимаю Ваше высказывание, Вы выбрали инструмент "под БД", то отход от использования средств БД противоречит поставленной цели - получается так, что "пошли вроде направо, а двигаемся почему-то влево". Это относится не только к ограничениям целостности в данном случае, но и к другим периодически мелькающим в форуме Oracle вопросам поддержки формсами тех или иных фич БД. мод Вы конечно скажите что проблемы и нет, но откуда тогда постоянно возникающие вопросы (на этом же форуме). Какие именно? Как Вы несомненно знаете, есть набор тем, которые будучи не слишком обоснованными, тем не менее периодически всплывают. Скажем, только вчера в форуме Oracle в очередной раз всплыла тема "гарантированный порядок записей в выборке без применения order by", которая многократно обсуждалась в половине форумов sql.ru, каждый раз завершалась объяснением "используйте order by", люди в общем понимали и не возражали, и тем не менее, через несколько недель поднимался очередной топик.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 11:33 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
PL99 EstetsМинусы подхода 1 справочник - 1 таблица: 1) Разработка серверной и интерфейсной части под каждый новый справочник. Не будем бить себя в грудь утверждая что это занимает мало времени, в случае универсального интерфейса надо вбить 1 строчку в список типов простых справочников с новым кодом и наименованием и все. 2) Поддержка серверной и клиентской части. У нас зарегистрировано в системе 190 типов простых справочников. Это 1 таблица и 4 процедуры на Select, Ins, Upd, Del. В клиентской части это 1 пункт меню список с фильтром и вызываемый из списка редактор. Соответственно для подхода "1х1" это 190 таблиц и 760 процедур в серверной части и 190 кнопок/пунктов меню в клиентской. Выбор за вами ;-)Странно слышать подобные слова от PowerBuilder разработчика :-))) Динамическая клиентская часть реализуется от силы парой десятков строк, а тривиальные процедуры, если они так необходимы, можно генерировать автоматически. IMHO возможность гарантировать ссылочную целостность перевешивает любые минусы, связанные с увеличением (зачастую мнимым) трудоемкости разработки. Это было сказано не к тому, что так нельзя делать Физически в программе есть одно окно window которое используется для показа полутысячи разных списков и отчетов, соответственно нельзя сказать что не используеься динамическая клиентская часть, и автоматическая генерация процедур наличествует. Но, это потребовало около 2-х человеко/лет на разработку и заказчик это оплатил (24*1500$=36000$). Если есть такая возможность пожалуйста, если нет то не стоит говорить о том что динамическая структура "1х1" по затратам соответствует решению "все в одной таблице" (2 человеко/дня на разработку и отладку = 150$) Вопрос с сылочной целостностью это более серьезный вопрос, действительно если она необходима, то подойдет только решение "один справочник - одна таблица". Поддержка целостности с помощью процедур и триггеров для решения "все в одном" на порядок более затратная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 11:35 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
EstetsНо, это потребовало около 2-х человеко/лет на разработку и заказчик это оплатил (24*1500$=36000$). Если при этом речь идет о разных таблицах из двух одинаковых полей, это очень похоже на самую наглую махинацию в истории земного бизнеса ;) EstetsЕсли есть такая возможность пожалуйста, если нет то не стоит говорить о том что динамическая структура "1х1" по затратам соответствует решению "все в одной таблице" (2 человеко/дня на разработку и отладку = 150$) Да, не соответствует. Я бы сказал, "час на разработку и отладку" = $16. В этот час входят: - метод создания таблиц справочников с трудоемкостью, равной вводу с клавиатуры имени таблицы - интерфейс редактирования любой созданной таблицы - интерфейс выбора из любой созданной таблицы Интерфейсы подразумеваются на уровне базовых возможностей компонент (скажем, если используете DevExpress, поиск по первым символам получите автоматически, если используете стандартные, потребуется дополнительно пять-десять минут). EstetsВопрос с сылочной целостностью это более серьезный вопрос, действительно если она необходима , то :) Estetsподойдет только решение "один справочник - одна таблица". В принципе ссылочную целостность можно использовать и для варианта "все в одном". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 11:50 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarer EstetsНо, это потребовало около 2-х человеко/лет на разработку и заказчик это оплатил (24*1500$=36000$). Если при этом речь идет о разных таблицах из двух одинаковых полей, это очень похоже на самую наглую махинацию в истории земного бизнеса ;) Речь шла об инструменте (ядре) приложения которое как раз и позволяет в десяток кликов создать новый справочник/документ по аналогии с существующим, но лежащий на другой таблице включая интерфейсные процедуры и не требующий вмешательства в клиентскую часть, для начала работы пользователей с новым документом. softwarer EstetsЕсли есть такая возможность пожалуйста, если нет то не стоит говорить о том что динамическая структура "1х1" по затратам соответствует решению "все в одной таблице" (2 человеко/дня на разработку и отладку = 150$) Да, не соответствует. Я бы сказал, "час на разработку и отладку" = $16. В этот час входят: - метод создания таблиц справочников с трудоемкостью, равной вводу с клавиатуры имени таблицы - интерфейс редактирования любой созданной таблицы - интерфейс выбора из любой созданной таблицы Интерфейсы подразумеваются на уровне базовых возможностей компонент (скажем, если используете DevExpress, поиск по первым символам получите автоматически, если используете стандартные, потребуется дополнительно пять-десять минут). Эх где бы таких программистов и побольше Правда отошел я от программирования, но времена были указаны реальные, сколько выполнял ту или иную работу человек на такой ставке. softwarer EstetsВопрос с сылочной целостностью это более серьезный вопрос, действительно если она необходима , то :) Estetsподойдет только решение "один справочник - одна таблица". В принципе ссылочную целостность можно использовать и для варианта "все в одном". Можно, но как я сказал выше, сложнее. Либо хранить в документах два поля ID-тип справочника, что сводит на нет удобство использования но позволяет использовать ссылочную целостность (в нашем случае простые справочники имеют двойной ключ тип-id). Либо использовать триггерные проверки зашивая туда тип справочника, что долго и муторно. Либо не использовать ссылочную целостьность вообще ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 12:25 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Была давно такая идея... придумать модель универсального справочника, сделать для него универсальную форму ввода/выбора/поиска... Вошли в штопор на первом же этапе -- дать определение понятию СПРАВОЧНИК. Придумали много, но почти все реальные сущности, которые мы НАЗЫВАЛИ справочниками под придуманные определения не подходили. Далее... почти все что называлось у нас справочником имело свои особенности и в целом общего имело столько же, сколько общего между яблоком и устрицей... их обоих можно есть и обоими можно отравиться... На этом сходство заканчивается. Возникает ощущение, что некоторые не избавились от хм... страстного желания унификации. Т.е. если две совершенно разные сущности имеют атрибут ИМЯ, то нужно обязательно им выделить общего предка и вынести туда этот атрибут (т.е. положить все на одну таблицу). Как правило, при таком подходе приложение начинает разрываться внутренними связями и рушится. Если две сущности имеют одинаково произносимые атрибуты , это еще не означает их родственность. И как правило есть совершенно разные сущности (классы, таблицы) с одинаково звучащими именами атрибутов/методов. Мне лень искать примеры... но возьмем класс TFileStream и TForm из VCL, у них у обоих есть метод Close. И что, по этой причине дать им общего предка? Аналогичная ситуация со свойствами Checked, SelectedIndex -- оно есть у многих, но общего предка с этим свойством нет. Я привел пример из VCL, но разницы с таблицами в данном случае нет. Здесь приводили пример со 190 справочниками... Мне интересно... они что действительно все имеют только два атрибутама (ИД, ИМЯ) и никаких других отличий? Может в данном случае это действительно ОДНА сущность с тремя атрибутами (ИД, ИМЯ, ТИП)? Тогда и вопросов нет... Если же справочник товаров разделять на носки и топоры, то тогда и 2000 справочников может быть. Пример SYSOBJECT из mssql, как довод за "все в одном" совершенно некорректен в данном случае. Это тот случай, когда именно так и должно быть. Если представить эту структуру графически, то это будет дерево классов, порожденных от общего предка ОБЪЕКТА БД. У всех у них очень много общего и над всеми ими производятся общие однотипные операции. Это обычный способ отображения дерева классов на ER-структуру -- общий предок с максимумом возможных полей находится в одной таблице, очень специфическое потомков выносится в дочерние таблицы. Еще очень важно в этом примере то, что все объекты БД имеют ссылки друг на друга. Если представить их все в виде отдельных таблиц, то они будут иметь связи "все со всеми". Отображение на одну таблицу позволяет избавиться от этой гирлянды связей. И "гулять" по такой структуре намного легче, потому что много связей между объектами. В большинстве же случаев так называемые справочники не имеют между собой большого кол-во внутренних связей и, что самое главное, не требует хм... как бы точнее.... перекрестной обработки, в общем не нужно "ходить" сразу по всем справочникам. Остается вопрос и будущего. Даже если сейчас есть 100 справочников структуры (ИД, Имя), то где гарантия, что завтра у сотого не появятся особенности? И тут лучше сегодня иметь 100 таблиц, 4 хр. процедуры на insert/update/delete/select и 3 окошка для отображения/выбора/изменения. Завтра, когда изменится табличка за номером 100, я добавлю ( в самом тяжелом случае ) еще 4 хп, 3 окошка, и не нужно будет ломать голову как втиснуть новые требования в старую структуру . Еще мерещится вопрос разработки... Если у меня 190 таблиц в ЕрВине, они все разные... И когда от одной из них тянется связь, я точно знаю, от какой. Если же у меня одна чудо-таблица, то все связи идут от одной таблицы... И что потом по такой структуре можно понять??? С чем именно связаны таблицы "Заказ--Состав заказ", с валютой, с единицой измерения, товаром??? Все связи будут тянуться к одной таблице (все в одном). И что в таком случае делать с ограничениями целостности? Ведь где-то правило будет restrict, где-то set to null... --- Обсуждение подхода "все в одной таблице" имеет смысл только для каждого отдельного случая . Два таких типовых примера я назвал, а других и не знаю. Утверждения, типа "все в одном просто лучше множества таблиц" обнаруживает непонимание самих основ программирования. P.S. Все таки интересно посмотреть на перечень 190 справочников только из двух полей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 12:48 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
СержP.S. Все таки интересно посмотреть на перечень 190 справочников только из двух полей.Вот список наших категорий. Каждая категория - это отдельный справочник. Большинство из них - это варианты ответа в анкетах для операторов Call-центра под разные проекты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 13:03 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
BelyКаждая категория - это отдельный справочник. Большинство из них - это варианты ответа в анкетах для операторов Call-центра под разные проекты. В таком виде мало понятно, что они из себя представляют... например, 9 строк с приставкой SPORT_ SPORT_COMMON 21 SPORT_FIRM_TYPE 3 SPORT_FISHING 12 SPORT_OTHER_TYPES 12 SPORT_SERVICE_TYPE 5 SPORT_SUMMER_TOURISM 22 SPORT_TRENAJORS 11 SPORT_WEAPON 15 SPORT_WINTER_TOURISM 9 Это 9 справочников? И что он содержат? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 13:25 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Серж BelyКаждая категория - это отдельный справочник. Большинство из них - это варианты ответа в анкетах для операторов Call-центра под разные проекты. В таком виде мало понятно, что они из себя представляют... например, 9 строк с приставкой SPORT_ SPORT_COMMON 21 SPORT_FIRM_TYPE 3 SPORT_FISHING 12 SPORT_OTHER_TYPES 12 SPORT_SERVICE_TYPE 5 SPORT_SUMMER_TOURISM 22 SPORT_TRENAJORS 11 SPORT_WEAPON 15 SPORT_WINTER_TOURISM 9 Это 9 справочников? И что он содержат?Это 9 справочников - содержание анкеты по ассортименту спортивных магазинов. содержат перечень ассортимента и характеристик. Возможен множественный выбор признаков. часть из этих категорий - выложено в файле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 13:44 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
EstetsРечь шла об инструменте (ядре) приложения которое как раз и позволяет в десяток кликов создать новый справочник/документ по аналогии с существующим, но лежащий на другой таблице включая интерфейсные процедуры и не требующий вмешательства в клиентскую часть, для начала работы пользователей с новым документом. Хм. Если бы речь шла только о справочниках, я бы назвал цифру "совершенно нереальной". В том, что касается документов, есть совершенно непредсказуемый пункт "интеграция с учетной машиной", определение действий, которые должны происходить при той или иной операции с документом. EstetsЭх где бы таких программистов и побольше Правда отошел я от программирования, но времена были указаны реальные, сколько выполнял ту или иную работу человек на такой ставке. Я верю, что они их столько выполняли :) Я назвал то время, за которое я могу "сесть и сделать" означенное. Есть такой интересный эффект, если разбирать подобные стандартные решения - выходит, что куча трудоемкости уходит не на основную задачу, а на возникающие попутно хотелки и рюшечки, причем опять же не столько на реализацию, сколько на их согласование. EstetsМожно, но как я сказал выше, сложнее. Либо хранить в документах два поля ID-тип справочника, что сводит на нет удобство использования но позволяет использовать ссылочную целостность Хм. Не очень понял, чем это сводит на нет удобство использования (если, конечно, Вы не имеете в виду идиотизм независимой нумерации id внутри типа). Все то же самое. Основной минус ключа по двум полям - мусор. Как мусор в данных, лишнее место в таблице итп, так и мусор в метаданных (поля, которые не фигурируют нигде ни в интерфейсе, ни в процедурах). Наилучший имхо способ сочетать "одну таблицу" со ссылочной целостностью - использовать generalized key. Например, выделить каждому справочнику по диапазону из миллиона значений id. Понятие "категории" при этом в явном виде уходит, а ограничения целостности становятся комбинацией наподобие Код: plaintext 1. 2. 3. 4. 5. 6. 7. Тоже, конечно, уродство, но работать будет получше других вариантов. EstetsЛибо не использовать ссылочную целостьность вообще Угу. Пример моей любимой концепции, называется "эскалация кривизны". Я бы отметил исключительную уместность подхода. Я готов понять ситуацию, когда, после того как вендор тщательно протестировал приложение, админ, пытаясь выжать из системы несколько процентов производительности, отключает некоторые ключи. Но в ситуации "мы даем пользователю инструмент доработки системы и при этом отключаем тривиальные проверки целостности".... Это здорово похоже на поиск подружки на ночь в ближайших окрестностях КВД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 14:02 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
BelyЯ могу сказать откуда - от ЛЕНИ. Ну, это слишком простое объяснение, причины есть позерьезнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 15:30 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
мод BelyЯ могу сказать откуда - от ЛЕНИ. Ну, это слишком простое объяснение, причины есть позерьезнее.Тогда Вы их назовите... Трудозатраты на создание вспомогательных объектов? Это автоматизируется... Трудозатраты на печатание запросов? Это вообще смешно - скорость работы программиста слабо связана с такой разницей в размерах запроса. Издержки производительности базы? Их тоже нет... что-то еще назовете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 15:37 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Серж P.S. Все таки интересно посмотреть на перечень 190 справочников только из двух полей. Например документооборот, у каждого документа есть признаки: 1-Внешний 2-внутренний 1-Входящий 2-Исходящий 1-Бумажный 2-Электронный 1-Передан по почте 2-Курьером 3-По сети итд. итп. часть полей чисто справочная, от установки других зависит процесс обработки документов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 15:51 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarer BelyУ нас для таких супер простых вариантов есть таблица SIMPLE_LIST, где есть поле NAME, ID, CATEG_NAME Когда-то, году в 94-м, я работал примерно так же, на клиппере. Потом, когда пришел на Oracle, задал вопрос - а почему бы не сложить простые справочники таким манером. В ответ на что получил просьбу назвать хотя бы одно осмысленное преимущество такой вот "кучи малы" (под неосмысленными я понимаю, например, экономию нескольких килобайт дискового пространства). Попробовал - и не смог. Так до сих пор и не могу, одни минусы. Может термин "справочник" запутывает? Корова - это элемент справочника. Но ведь это же и факт существования такого животного. То есть, концептуально, такой же факт, как и факт покупки коровы, например. Делать одну таблицу "Товар" или сотни и тысячи таблиц "Товары такие-то"? А ссылки на товары в операциях, например в таблице покупок, хорошо будут выглядеть, если товары во многих таблицах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 16:38 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
СержБыла давно такая идея... придумать модель универсального справочника, сделать для него универсальную форму ввода/выбора/поиска... Вошли в штопор на первом же этапе -- дать определение понятию СПРАВОЧНИК. Придумали много, но почти все реальные сущности, которые мы НАЗЫВАЛИ справочниками под придуманные определения не подходили. Далее... почти все что называлось у нас справочником имело свои особенности и в целом общего имело столько же, сколько общего между яблоком и устрицей... их обоих можно есть и обоими можно отравиться... На этом сходство заканчивается. Возникает ощущение, что некоторые не избавились от хм... страстного желания унификации. Т.е. если две совершенно разные сущности имеют атрибут ИМЯ, то нужно обязательно им выделить общего предка и вынести туда этот атрибут (т.е. положить все на одну таблицу). Как правило, при таком подходе приложение начинает разрываться внутренними связями и рушится. Если две сущности имеют одинаково произносимые атрибуты , это еще не означает их родственность. И как правило есть совершенно разные сущности (классы, таблицы) с одинаково звучащими именами атрибутов/методов. Мне лень искать примеры... но возьмем класс TFileStream и TForm из VCL, у них у обоих есть метод Close. И что, по этой причине дать им общего предка? Аналогичная ситуация со свойствами Checked, SelectedIndex -- оно есть у многих, но общего предка с этим свойством нет. Я привел пример из VCL, но разницы с таблицами в данном случае нет. Здесь приводили пример со 190 справочниками... Мне интересно... они что действительно все имеют только два атрибутама (ИД, ИМЯ) и никаких других отличий? Может в данном случае это действительно ОДНА сущность с тремя атрибутами (ИД, ИМЯ, ТИП)? Тогда и вопросов нет... Если же справочник товаров разделять на носки и топоры, то тогда и 2000 справочников может быть. Пример SYSOBJECT из mssql, как довод за "все в одном" совершенно некорректен в данном случае. Это тот случай, когда именно так и должно быть. Если представить эту структуру графически, то это будет дерево классов, порожденных от общего предка ОБЪЕКТА БД. У всех у них очень много общего и над всеми ими производятся общие однотипные операции. Это обычный способ отображения дерева классов на ER-структуру -- общий предок с максимумом возможных полей находится в одной таблице, очень специфическое потомков выносится в дочерние таблицы. Еще очень важно в этом примере то, что все объекты БД имеют ссылки друг на друга. Если представить их все в виде отдельных таблиц, то они будут иметь связи "все со всеми". Отображение на одну таблицу позволяет избавиться от этой гирлянды связей. И "гулять" по такой структуре намного легче, потому что много связей между объектами. В большинстве же случаев так называемые справочники не имеют между собой большого кол-во внутренних связей и, что самое главное, не требует хм... как бы точнее.... перекрестной обработки, в общем не нужно "ходить" сразу по всем справочникам. Остается вопрос и будущего. Даже если сейчас есть 100 справочников структуры (ИД, Имя), то где гарантия, что завтра у сотого не появятся особенности? И тут лучше сегодня иметь 100 таблиц, 4 хр. процедуры на insert/update/delete/select и 3 окошка для отображения/выбора/изменения. Завтра, когда изменится табличка за номером 100, я добавлю ( в самом тяжелом случае ) еще 4 хп, 3 окошка, и не нужно будет ломать голову как втиснуть новые требования в старую структуру . Еще мерещится вопрос разработки... Если у меня 190 таблиц в ЕрВине, они все разные... И когда от одной из них тянется связь, я точно знаю, от какой. Если же у меня одна чудо-таблица, то все связи идут от одной таблицы... И что потом по такой структуре можно понять??? С чем именно связаны таблицы "Заказ--Состав заказ", с валютой, с единицой измерения, товаром??? Все связи будут тянуться к одной таблице (все в одном). И что в таком случае делать с ограничениями целостности? Ведь где-то правило будет restrict, где-то set to null... --- Обсуждение подхода "все в одной таблице" имеет смысл только для каждого отдельного случая . Два таких типовых примера я назвал, а других и не знаю. Утверждения, типа "все в одном просто лучше множества таблиц" обнаруживает непонимание самих основ программирования. P.S. Все таки интересно посмотреть на перечень 190 справочников только из двух полей. Зря Вы это. Использование унификации, аналогий, симметрии и других концепций крайне полезно при проектировании. И при чем здесь основы программирования? Вы стараетесь программировать (больше программировать) или, наоборот, не программировать (меньше программировать)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 16:45 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
БредМожет термин "справочник" запутывает? Да нет, не думаю. БредНо ведь это же и факт существования такого животного. То есть, концептуально, такой же факт, как и факт покупки коровы, например. Угу. Факт существования коровы - если концептуально - такой же факт, как факт покупки коровы. А факт покупки коровы - концептуально - такой же факт, как факт приема сотрудника на работу. А факт приема сотрудника на работу - концептуально - такой же факт, как факт добавления отдела в штатное расписание. Итого, получаем, что - концептуально - при создании отдела должны возникать оргпроводки и формироваться план надоев. Итого, означенная концепция представляется мне спорной, хотя и возможной. Собственно, "универсальный учетный движок" с оргпроводками представляется мне вещью более разумной, нежели "универсальный справочник". Лично я предпочитаю другую концепцию: "похожее - вместе, различное - отдельно". Уверен, все высказывавшиеся под ней подпишутся, при этом половина из них скажет "но ведь они похожи". Действительно, ключевой вопрос - критерии похожести. И с моей точки зрения, есть правильный и удобный критерий, четкий и формальный: сравнение количества мест, в которых бизнес-функции требуют работы "со всеми такими объектами разом" и количества мест, где требуется "объекты только вот этой категории". В случае справочников этот расклад более чем четок и однозначен. Места, где требуются значения из справочников вместе, можно пересчитать по пальцам. Сходу я вижу только две функции: экспорт данных и настройка прав. Ну а мест, где требуются справочники поотдельности.... если в системе сто простых справочников, значит, есть как минимум сотня "персональных" ссылок из других таблиц, плюс интерфейс редактирования тех таблиц, в которых используются эти справочники, запросы и отчеты.... Разумеется, можно сказать, что учет "по количеству упоминаний" не совсем верен, и правильнее ввести какую-то весовую функцию, которая учтет "здесь сложно, здесь просто", но с моей точки зрения, кардинальной разницы это уточнение не внесет; в конце концов даже "один удесятеренный вес" против ста не канает. Хотя, допускаю, что в некоторых инструментах.... [традиционный disclaimer] В случае тех же товаров, о которых Вы упоминали, ситуация другая. Ссылок "на отдельный товар" почти не бывает, ссылки "на все товары" - почти в любой операции. Вот и дизайн оптимален другой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 17:06 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarer В случае тех же товаров, о которых Вы упоминали, ситуация другая. Ссылок "на отдельный товар" почти не бывает, ссылки "на все товары" - почти в любой операции. Вот и дизайн оптимален другой. В данном случае согласен, гы-гы-гы только вы еще физиков-юриков вспомните ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 17:20 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Не совсем понял про другую ситуацию, честно говоря (ведь в конкретной операции ссылка на конкретный товар). Вроде как тысяч таблиц товаров мы делать не будем, хотя они (товары) совершенно разные и не похожие... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 17:24 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
EstetsВ данном случае согласен, гы-гы-гы только вы еще физиков-юриков вспомните Вспомню, лехххко. В полнофункциональной системе как правило куча функционала, относящегося к ним поотдельности, и куча же функционала, относящегося к ним вместе. Поэтому последние лет пять я однозначный сторонник дизайна из таблиц "Физики", "Юрики" и "Контрагенты". Таким образом, например, "Сотрудник" у нас - однозначно "физик", "Банк" - однозначно "юрик", а "Покупатель" может быть и тем, и другим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 17:27 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Бред хотя они (товары) совершенно разные и не похожие... Для кого? Для типичных ИС товары похожи как две капли воды и различаются максимум признаками на уровне категорий (то наливаем в цистерны, это складываем штабелями). При этом, что характерно, с точки зрения ИС цистерна почти не отличается от штабеля - во многих случаях это две строки одного справочника и не более того. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 17:29 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Что касается именно "справочников" (теперь понятно, что "товары" - это не справочник!) и "похожее - вместе, различное - отдельно", то я храню, конечно, даже "абсолютно похожие справочники" в разных таблицах. Иначе говоря, разные сущности я храню в разных таблицах. Справочник видов оплат и справочник видов транспорта я не объединю даже, если в них никогда не добавится никаких атрибутов, кроме ID и Name. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 17:39 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Серж В большинстве же случаев так называемые справочники не имеют между собой большого кол-во внутренних связей и, что самое главное, не требует хм... как бы точнее.... перекрестной обработки, в общем не нужно "ходить" сразу по всем справочникам. С этим я согласен. Объединение было сделано не по логическому признаку, а из унификации. Серж Остается вопрос и будущего. Даже если сейчас есть 100 справочников структуры (ИД, Имя), то где гарантия, что завтра у сотого не появятся особенности? И тут лучше сегодня иметь 100 таблиц, 4 хр. процедуры на insert/update/delete/select и 3 окошка для отображения/выбора/изменения. Завтра, когда изменится табличка за номером 100, я добавлю ( в самом тяжелом случае ) еще 4 хп, 3 окошка, и не нужно будет ломать голову как втиснуть новые требования в старую структуру . В случае одной таблицы, как было описано выше происходит совершенно аналогичная работа. Создается вторая таблица с "особенностями", 4 процедуры, перекидываются данные по данному типу из первой таблицы во вторую, перепривязываются ссылки на новую таблицу в запросах и интерфейсе. Либо как было сказано выше создается для данного типа расширяющая таблица. Серж Еще мерещится вопрос разработки... Если у меня 190 таблиц в ЕрВине, они все разные... И когда от одной из них тянется связь, я точно знаю, от какой. Когда я представлю 190 однотипных таблиц в ЕрВине... ужас охватывает меня ;))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 17:53 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
EstetsКогда я представлю 190 однотипных таблиц в ЕрВине... ужас охватывает меня ;))) Попробуйте как-нибудь при случае нажать в нем кнопку "создать вторую диаграмму" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 17:56 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarer EstetsКогда я представлю 190 однотипных таблиц в ЕрВине... ужас охватывает меня ;))) Попробуйте как-нибудь при случае нажать в нем кнопку "создать вторую диаграмму" Ну нету, нету у нас модели данных, вся (мета)информация о БД хранится в БД. Можете смеяться но прообразом всего этого служила 1С и Axapta, только с переводом бизнес логики на уровень ХП. Со своими плюсами как отсутствие компиляции клиентской части как таковой, и со своими минусами как отсутствие триггерной и ссылочной целостности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 18:08 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
EstetsНу нету, нету у нас модели данных Ну так не пытайтесь представить то, чего у Вас нет :) Estetsвся (мета)информация о БД хранится в БД. Можете смеяться но прообразом всего этого служила 1С и Axapta, только с переводом бизнес логики на уровень ХП. Я нисколько не собираюсь смеяться, мне скорее грустно от мысли, какой великолепный самолет можно было бы построить, если бы с толком применить все усилия, затраченные на сотни бумажных голубков... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 18:21 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarer EstetsНу нету, нету у нас модели данных Ну так не пытайтесь представить то, чего у Вас нет :) Estetsвся (мета)информация о БД хранится в БД. Можете смеяться но прообразом всего этого служила 1С и Axapta, только с переводом бизнес логики на уровень ХП. Я нисколько не собираюсь смеяться, мне скорее грустно от мысли, какой великолепный самолет можно было бы построить, если бы с толком применить все усилия, затраченные на сотни бумажных голубков... К сожалению деньги платят за реальных голубков, а не за гипотетический самолет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 18:28 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Estets Можете смеяться но прообразом всего этого служила 1С и Axapta, только с переводом бизнес логики на уровень ХП. И что, интересно, явилось причиной выбора именно такого дизайна? Ведь одинаковую функциональность можно решить овершенно разными способами, и это даже не ИМХО, это факт... Я не иронизирую, просто хочу соломку подстелить, чтоб самому в такое не вляпаться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 20:36 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
EstetsК сожалению деньги платят за реальных голубков, а не за гипотетический самолет К сожалению, довольно часто платят как за самолет, а в итоге вынуждены довольствоваться голубком ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2007, 20:56 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
BelyЭто 9 справочников - содержание анкеты по ассортименту спортивных магазинов. Мне кажется, что это как раз тот случай, когда все это по сути один справочник сложной структуры. EstetsНапример документооборот, у каждого документа есть признаки: А 1-Внешний 2-внутренний Б 1-Входящий 2-Исходящий В 1-Бумажный 2-Электронный Г 1-Передан по почте 2-Курьером 3-По сети В данном случае я вижу одну таблицу "Документ" с несколькими атрибутами. Возможные значения атрибутов А,Б,В определяются на этапе разработки и в дальнейшем не меняются. Аттр. Г в принципе может расширяться, но список возможных способов доставки конечен и может легко расширяться разработчиком. Бред Зря Вы это. Использование унификации.... Правильно, унификация -- великая вещь! Но я уже привел привел со свойство SelecttedItem. Если оно есть у многих, то это не повод притягивать их за уши друг к другу. Estets Создается вторая таблица с "особенностями", 4 процедуры, перекидываются данные по данному типу из первой таблицы во вторую, перепривязываются ссылки на новую таблицу в запросах и интерфейсе.... Когда я представлю 190 однотипных таблиц в ЕрВине... ужас охватывает меня ;))) Каждый колет дрова под свою печку... Я просто не вижу никаких достоинств в подобном подходе вообще (в каком-то конкретном, возможно да). А 190 табл. в ЕрВине совсем не пугают -- есть области, на которых можно отображать только значимые для данной точки зрения таблицы. И самый главный вопрос -- ограничения целостности... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2007, 18:04 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Серж BelyЭто 9 справочников - содержание анкеты по ассортименту спортивных магазинов.Мне кажется, что это как раз тот случай, когда все это по сути один справочник сложной структуры.Объяснение, вырванное из контекста, может объяснить что угодно, кроме реальности. Среди этих - это один справочник. А среди 160 категорий, которые я привел в файле - можно выделить около 30 разнотипных справочников, которые логически разные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2007, 18:10 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Серж EstetsНапример документооборот, у каждого документа есть признаки: А 1-Внешний 2-внутренний Б 1-Входящий 2-Исходящий В 1-Бумажный 2-Электронный Г 1-Передан по почте 2-Курьером 3-По сети В данном случае я вижу одну таблицу "Документ" с несколькими атрибутами.Вопрос не про конкретные атрибуты, а про то где хранить значения. СержВозможные значения атрибутов А,Б,В определяются на этапе разработки и дальнейшем не меняются .Слишком смелое утверждение для неизвестных требований неизвестной истсемы. Я бы сказал, что здесь как повезет, жизнь заставит - могут и измениться. Я не вижу проблемы в расширении списка значений, кроме внутренних ограничений системы. СержАттр. Г в принципе может расширяться, но список возможных способов доставки конечен и может легко расширяться разработчиком.Вопрос стоит не про расширение списка - это делается легко и непринужденно при любом подходе, а про увеличение свойств. Напимер в свойстве (Г) может быть введена ставка по отправке за лист документа: "По почте" - 1 руб, "Курьером" - 10 руб, "По сети" - 0.1 руб. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2007, 18:29 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
СержПравильно, унификация -- великая вещь! Но я уже привел привел со свойство SelecttedItem. Если оно есть у многих, то это не повод притягивать их за уши друг к другу. Пример, кстати, не очень удачный. Во-первых, неудачный сам по себе, во-вторых, плохо соответствующий обсуждаемому вопросу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2007, 18:42 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Не понимайю! Я на любом наборе идентичных справочников построю вам код, который не менее автоматически будет обрабатывать что одну таблицу, что 800, разница - в 2 (ДВУХ) разных свойствах одной и той-же формы! Однако, если мой, один из стандартных, справочников, станет вдруг не стандартным, то я, не меняя клиентскую часть вообще, смогу это изменение на этом-же коде реализовать, более того, уже реализовал. Честно, ребята, я не вижу принципиальной разницы между объявлениями "Customer.ID = ..." и "СustomerType = ... AND Value = ...", т.е. вижу, но я это уже объяснял... Добавлю, если не внапряг: вы-же дома у себя не кладёте в один ящик носки и гвозди, почему!!! вы позволяете себе такой подход в отношении Базы Данных! Объясните, в чём цимес-то, тупому-то! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2007, 20:04 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Ну кроме того, что у нас так сделано... и ты вааще молодой и ничего не паниаеш... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2007, 20:05 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
egorychОднако, если мой, один из стандартных, справочников, станет вдруг не стандартным, то я, не меняя клиентскую часть вообще, смогу это изменение на этом-же коде реализовать, более того, уже реализовал. Как говаривал мой однокурсник... Дайте мне программу и я сформулирую такие требования, что вам ее придется переделывать. Справочники просто так не расширяются и логика расширения не всегда линейная (добавление полей). Справочник может начать участвовать в бизнеслогике, которая наложит свои ограничения. egorychДобавлю, если не внапряг: вы-же дома у себя не кладёте в один ящик носки и гвозди, почему!!! вы позволяете себе такой подход в отношении Базы Данных!А у вас под каждый вид крупы дома отдельный шкаф? Один шкаф под овсянку, другой под рис, третий под манку, четвертый под перец, пятый под лавровый лист... так? Не стоит приводить житейские аналогии там где им не место. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2007, 09:39 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
BelyА у вас под каждый вид крупы дома отдельный шкаф? Отдельный контейнер. Сколь я видел, даже продаются заранее подписанные наборы кухонной посуды. А у Вас сухое молоко делит одну банку с молотым перцем? Шкаф упомянут не очень к месту. "Оракловым аналогом шкафа" будет пожалуй что tablespace. BelyНе стоит приводить житейские аналогии там где им не место. Аналогия как раз удачная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2007, 09:44 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarer BelyА у вас под каждый вид крупы дома отдельный шкаф? Отдельный контейнер. Сколь я видел, даже продаются заранее подписанные наборы кухонной посуды. А у Вас сухое молоко делит одну банку с молотым перцем? Шкаф упомянут не очень к месту. "Оракловым аналогом шкафа" будет пожалуй что tablespace. BelyНе стоит приводить житейские аналогии там где им не место. Аналогия как раз удачная.Аналогия - не удачная и вот почему: 1) Если банка - это таблица, то что тогда строка в таблице? У меня строкой будет - как раз банка в которой лежит отдельно перец, отдельно сахар. А у вас что? 2) Tablespace - я бы сказал, что tablespace - это скорее КУХНЯ, т.е. помещение, где все находится. Причем, может находиться неоднородное - как продукты, так и кастрюли, мясорубки, цветы на подокойнике. 3) Если я начну рассуждать по житейски - то я могу много нового внести в проектирование баз данных. Например, я могу сделать вывод, что старые таблицы надо время от времени удалять и создавать новые - заполняя их тем же данными. Это будет делаться по аналогии с выходом на пенсию и передачей дел молодому сотруднику. А еще - надо вместо одной таблицы - держать вторую такую же - про запас. Если с одной таблицей надо провести профилактику (индекс перестроить), то надо переключиться на другую таблицу и с ней работать. Это по аналогии с больничным листом или отпуском и заменой одного сотрудника другим. Продолжать? Я думаю, что лучше обходиться без аналогий, всетаки. Все достаточно подкованы в математике и базах, чтобы обойтись без ненужных пружинок и веревочек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2007, 10:00 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
egorych Estets Можете смеяться но прообразом всего этого служила 1С и Axapta, только с переводом бизнес логики на уровень ХП. И что, интересно, явилось причиной выбора именно такого дизайна? Ведь одинаковую функциональность можно решить овершенно разными способами, и это даже не ИМХО, это факт... Я не иронизирую, просто хочу соломку подстелить, чтоб самому в такое не вляпаться Вообщем если Вы разрабатываете концепцию ПО и не сильно ограничены требованиями заказчика, то и "вляпаться" вам не грозит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2007, 10:28 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Серж EstetsНапример документооборот, у каждого документа есть признаки: А 1-Внешний 2-внутренний Б 1-Входящий 2-Исходящий В 1-Бумажный 2-Электронный Г 1-Передан по почте 2-Курьером 3-По сети В данном случае я вижу одну таблицу "Документ" с несколькими атрибутами. Возможные значения атрибутов А,Б,В определяются на этапе разработки и в дальнейшем не меняются. Аттр. Г в принципе может расширяться, но список возможных способов доставки конечен и может легко расширяться разработчиком. В данном случае я против "зашивания" значений атрибутов в клиентский код, именно из за того что заранее неизвестно какие из списков необходимо будет расширить. Пусть реально из 190 справочников правились или расширялись у клиентов штук 10-15, но не стоит забывать что одни и те же вещи у разных контор могут называться по разному, а если количество внедрений больше 10 или больше 50-ти? Это что значит держать штат программистов которые будут только поддерживать версии "простых справочников" для разных клиентов? Серж А 190 табл. в ЕрВине совсем не пугают -- есть области, на которых можно отображать только значимые для данной точки зрения таблицы. Это конечно была шутка, но в каждой шутке есть доля правды, как вы думаете насколько сложно, имея больше сотни таблиц запутаться в том что привязать "t_ПодтипыСделокДляОперацийПрямогоРЕПО" или "t_ПодтипыСделокДляОперацийОбратногоРЕПО" ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2007, 10:47 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
BelyУ меня строкой будет - как раз банка в которой лежит отдельно перец, отдельно сахар. Really? Вот тут Вы теряете связь с оракловой базой. В справочниках у Вас строка - это отдельная перчинка и отдельная сахаринка (которые Вы добавляете и удаляете), а "сахар" и "перец" - категории. Bely2) Tablespace - я бы сказал, что tablespace - это скорее КУХНЯ, т.е. помещение, где все находится. Причем, может находиться неоднородное - как продукты, так и кастрюли, мясорубки, цветы на подокойнике. Шкаф - тот же самый контейнер для неоднородных предметов. Что существенно, он не содержит отделимых подконтейнеров (давайте не будем про отделимые топором :) и поэтому является аналогом такого же "минимального контейнера" в базе - tablespace. Кухня - это, скорее, аналог БД, хотя здесь уже аналогии получаются зыбкими; можно по-разному играть словами, но смысла уже не будет. Bely3) Если я начну рассуждать по житейски - то я могу много нового внести в проектирование баз данных. Верно. И я согласен, что к аналогиям надо подходить с осторожностью - и не пытаться "действовать просто потому, что по аналогии". Однако, для объяснения той или иной концепции удачные аналогии уместны, а данная представляется мне удачной. BelyНапример, я могу сделать вывод, что старые таблицы надо время от времени удалять и создавать новые - заполняя их тем же данными. Это будет делаться по аналогии с выходом на пенсию и передачей дел молодому сотруднику. Странная аналогия. Я бы скорее сказал, что аналогией выхода на пенсию будет "время от времени надо выкидывать старое железо, перенося базы на новое". Скажете, это далеко от реальности? BelyПродолжать? Смотря какие цели Вы ставите. Если обосновать "любым инструментом можно воспользоваться плохо, особенно если поставить перед собой такую задачу", то незачем. BelyЯ думаю, что лучше обходиться без аналогий, всетаки. Это уже вопрос договоренностей о стиле беседы. BelyВсе достаточно подкованы в математике и базах, чтобы обойтись без ненужных пружинок и веревочек. Как Вам сказать..... у людей разные системы мышления и восприятия. Это факт, который стоит учитывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2007, 11:10 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Bely egorychДобавлю, если не внапряг: вы-же дома у себя не кладёте в один ящик носки и гвозди, почему!!! вы позволяете себе такой подход в отношении Базы Данных!А у вас под каждый вид крупы дома отдельный шкаф? Один шкаф под овсянку, другой под рис, третий под манку, четвертый под перец, пятый под лавровый лист... так? Не стоит приводить житейские аналогии там где им не место. Согласен, не совсем удачная аналогия, но если развит эту мысль то сдесь идет спор о том, что удобнее, хранить продукты каждый вид в своем контейнере (физически разделять хранилище), или на разных полочках (организовывать логическое разделение внутри одного физического хранилища - шкафа). Еще раз повторю, ИМХО, оба подхода имеют право на существование, но не вижу однозначных плюсов или минусов, что бы выбрать один из подходов как "единственно верный". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2007, 11:24 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarer BelyНапример, я могу сделать вывод, что старые таблицы надо время от времени удалять и создавать новые - заполняя их тем же данными. Это будет делаться по аналогии с выходом на пенсию и передачей дел молодому сотруднику.Странная аналогия. Я бы скорее сказал, что аналогией выхода на пенсию будет "время от времени надо выкидывать старое железо, перенося базы на новое". Скажете, это далеко от реальности?Для меня хранение житейских предметах в ящиках - странная аналогия. В жизни - никто не будет хранить грязные носки вместе с хлебом, потому что носки пахнут. А в БД разнотипное (существенно) может храниться в базе в одной таблице (например EAV значения). Биты - они не пахнут... softwarer BelyПродолжать?Смотря какие цели Вы ставите. Если обосновать "любым инструментом можно воспользоваться плохо, особенно если поставить перед собой такую задачу", то незачем.Я хочу сказать, что аналогии можно употреблять только чтобы сделать обяснение более доступным, а в качестве доказательства почему "так надо делать" - это неприемлемо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2007, 11:57 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
BelyСреди этих - это один справочник. А среди 160 категорий, которые я привел в файле - можно выделить около 30 разнотипных справочников, которые логически разные. Значит будет 30 справочников. BelyВопрос не про конкретные атрибуты, а про то где хранить значения. Как поля таблицы, типа unsigned int. BelyСлишком смелое утверждение для неизвестных требований неизвестной истсемы. Дак приводите целиком требования... BelyВопрос стоит не про расширение списка - это делается легко и непринужденно при любом подходе, а про увеличение свойств. А что "одна таблица на все" спасет от изменения требований? softwarerПример, кстати, не очень удачный. Во-первых, неудачный сам по себе, во-вторых, плохо соответствующий обсуждаемому вопросу. Возможно... Я ж не в школе, теорему доказывать... авторИ самый главный вопрос -- ограничения целостности... А с этим то что делать... Или это кажется несущественным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2007, 13:06 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
СержВозможно... Я ж не в школе, теорему доказывать...Не которые ответы меня вводят в недоумение - может, всетаки, вспомнить как в школе было? Напрячся чутка... подумать... СержЗначит будет 30 справочников. Как поля таблицы, типа unsigned int. Дак приводите целиком требования... А с этим то что делать... Или это кажется несущественным. Это вы вобще про что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2007, 13:24 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Серж авторИ самый главный вопрос -- ограничения целостности... А с этим то что делать... Или это кажется несущественным. Проверка целостности может быть реализована (двигаясь от клиента к БД): 1) На клиенте 2) На сервере приложений 3) На интерфейсных ХП 4) На триггерах 5) На констрейтах Вопрос какие проверки можно/нельзя проводить в случае того или иного решения? Как было сказано в ходе дискуссии выше только в 5-ом пункте накладываются некоторые ограничения в схеме "Все в одном" например нельзя для разных типов справочников ставить различную реакцию Restrict/Set Null/Set Default. Насколько это существенно решать Вам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2007, 13:38 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
BelyВ жизни - никто не будет хранить грязные носки вместе с хлебом, потому что носки пахнут. Вполне верная аналогия, которую стоит развить дальше. Хлеб можно заворачивать в целлофан, и запах носок станет неважен. Гвозди из тех же носок не так сложно вытряхивать перед одеванием. Итого - хранить их вместе можно, как можно хранить разнотипные записи в одной таблице. Но то и другое - дополнительный геморрой (заворачивать в целлофан, вешать "эксклюзивные" триггеры...) BelyЯ хочу сказать, что аналогии можно употреблять только чтобы сделать обяснение более доступным, а в качестве доказательства почему "так надо делать" - это неприемлемо. Безусловно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2007, 13:43 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarer BelyЯ хочу сказать, что аналогии можно употреблять только чтобы сделать обяснение более доступным, а в качестве доказательства почему "так надо делать" - это неприемлемо.Безусловно.Вот поэтому реплику egorsДобавлю, если не внапряг: вы-же дома у себя не кладёте в один ящик носки и гвозди, почему!!! вы позволяете себе такой подход в отношении Базы Данных!я рассматриваю как неверное использование аналогий, о чем и сказал. Мама мне в детстве говорила... или Сержант в армии учил... - это не доводы при проектировании ИС. Это лишь внутренние тараканы конкретного индивидуума, такие же как лично мне приятно видеть более компактные модели данных без лишнего нагромождения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2007, 13:51 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
BelyВот поэтому реплику ..... я рассматриваю как неверное использование аналогий, о чем и сказал. Я бы согласился, если бы это был стержневой аргумент, но я рассматриваю эту фразу скорее как попутное замечание - типа "вот так, и вот так, и вот так, и вообще даже вот такая кухонная аналогия..." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2007, 13:58 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Bely... такие же как лично мне приятно видеть более компактные модели данных без лишнего нагромождения. Вы знаете, а так сразу стала понятна Ваша позиция. И научную базу сразу перестало быть нужным подводить. По поводу вот этого-же: Я почему!!! вы позволяете себе такой подход в отношении Базы Данных! думаю, действительно, мне стоит извиниться. Извиняюсь за излишнюю эмоциональность высказывания, тараканы вырвались наружу :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2007, 14:49 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
egorych Bely... такие же как лично мне приятно видеть более компактные модели данных без лишнего нагромождения. Вы знаете, а так сразу стала понятна Ваша позиция. И научную базу сразу перестало быть нужным подводить.Дело в том, что я считаю эти два подхода - примерно равноценными. А в таком случае из двух вещей выбирается одна - уже на основе личных предпочтений. Главное действовать именно так, а не наоборот ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2007, 15:55 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
egorychНа самом деле, может, наоборот, сильно облегчить жизнь при написании интерфейса к этим справочникам, т.к. позволит нарисовать одну универсальную форму для всех справочников Нет разницы - универсальная форма может параметр 'форматировать' в имя таблицы-справочника. ps: 4 года назад принимал решение разбивать на ~15 таблиц-справочников {id, name} вместо одной {id, type, name} и обработку параметра type преобразовывать в обработку имени_таблицы - производительность улучшилась в разы (справочники разрослись) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2007, 18:43 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Есть однотипные но слегка разнящиеся сущности. А почему не рассмотреть схему - общее в общей таблице, отличное в отдельных связанных по 1:1? Плюсы в одной таблице ( либо предлагаемое выше) Delete from ALL_Справочники WHERE год-такой-то Update owner=Vasya where owner=Petya //Петя уволился итд А уж селект... Есть однотипные но слегка разнящиеся сущности. Ну и надо выбрать все те что удовлетворяют определенным критерриям -- например все документы Иванова И И что он сделал в 2005 году. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 05:08 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Аноним564Плюсы в одной таблице ( либо предлагаемое выше) Delete from ALL_Справочники WHERE год-такой-то Update owner=Vasya where owner=Petya //Петя уволился итд А уж селект...1. Если строки справочника принадлежат кому-то, то это уже не справочник, а записная книжка. Справочник - принадлежит ВСЕМ. 2. Если надо разделять доступ к справочнику, то можно ввести понятие ГРУППА. у которой есть права доступа к определенным строкам. Если человек уволился - его исключили из группы, а другого назначили. 3. Операция переназначения владельца (ведущего менеджера) для организаций (в CRM), для проекта, для документов - вполне достойна быть выделена в ОТДЕЛЬНУЮ операцию, которую можно реализовать с помощью процедуры или еще как-нибудь. На такую операцию - по хорошему надо назначать отдельные права. 4. Если в справочнике есть владелец, права доступа - то это ОДНОЗНАЧНО в отдельную таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 11:19 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Аноним564Есть однотипные но слегка разнящиеся сущности. - речь ранее шла, в общем-то о справочниках простейшего вида, полноценными сущностями не являющимися (по крайней мере пока) Аноним564А почему не рассмотреть схему - общее в общей таблице, отличное в отдельных связанных по 1:1? - потому что реализация такой связи потребует написания большого количества кода, поддерживающего ссылочную целостность и непротиворечивость данных, нетривиального и сложного в сопровождении, несопоставимого с поддержкой нескольких, изначально разделённых таблиц с обычными констраинтами и внешними ключами. Повторное использование кода, это конечно, хорошо, но заходить в этом направлении дальше необходимого всё-же не стоит. По мере развития программы от версии к версии "однотипные, но слегка разнящиеся" сущности постепенно превращаются в "слегка похожие", а потом и в "совершенно разные", общее у которых получается ID и Name. Позаботиться о будущем никогда не вредно, ещё при написании версии 1.0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 11:43 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Estets Серж P.S. Все таки интересно посмотреть на перечень 190 справочников только из двух полей. Например документооборот, у каждого документа есть признаки: 1-Внешний 2-внутренний 1-Входящий 2-Исходящий 1-Бумажный 2-Электронный 1-Передан по почте 2-Курьером 3-По сети итд. итп. часть полей чисто справочная, от установки других зависит процесс обработки документов. Это, скорее, домены, чем справоники. И лежать должны в доменах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2008, 11:41 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
BelyСержBelyКаждая категория - это отдельный справочник. Большинство из них - это варианты ответа в анкетах для операторов Call-центра под разные проекты. В таком виде мало понятно, что они из себя представляют... например, 9 строк с приставкой SPORT_ SPORT_COMMON 21 SPORT_FIRM_TYPE 3 SPORT_FISHING 12 SPORT_OTHER_TYPES 12 SPORT_SERVICE_TYPE 5 SPORT_SUMMER_TOURISM 22 SPORT_TRENAJORS 11 SPORT_WEAPON 15 SPORT_WINTER_TOURISM 9 Это 9 справочников? И что он содержат?Это 9 справочников - содержание анкеты по ассортименту спортивных магазинов. содержат перечень ассортимента и характеристик. Возможен множественный выбор признаков. часть из этих категорий - выложено в файле. Рассматривая ваши 190 справочников не увидел здесь одной таблицы в упор - тут 2 таблицы: -категории (SPORT_COMMON, SPORT_FIRM_TYPE...) -список значений для категории(Ракетки, мячи, сетки и др. для большого тенниса, Продажа товаров для спорта и отдыха...) зачем 190 справочников или все в одной таблице ... не пойму!!! проблема в постановке и анализе задачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2009, 16:46 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
spРассматривая ваши 190 справочников не увидел здесь одной таблицы в упор - тут 2 таблицы: -категории (SPORT_COMMON, SPORT_FIRM_TYPE...) -список значений для категории(Ракетки, мячи, сетки и др. для большого тенниса, Продажа товаров для спорта и отдыха...) зачем 190 справочников или все в одной таблице ... не пойму!!! проблема в постановке и анализе задачи!Еще раз. Есть 9 типов анкет: Авто, Одежда Обувь, Медицина, Спорт, Парикмахерские итд. Анкетирование проходит торговых точек. В каждой торговой точке заполняется одна (или несколько) анкет. В каждой анкете - есть вопросы, которые специфичны для этого типа. Например: Авто: кол-во машиномест в сервисе (число) Запчастями к каким машинам продают (список из 30 фирм: ВАЗ, ГАЗ, Мерседес, Опель итд.) Какие запчасти продают (список из 20 видов: стекла, магнитолы, глушители, шины итд.) итп. Общепит: Тип кухни (Грузинская, Японская, Русская, Европейская, Без специализации итд.) Тип обслуживания (с официантами, бармены, самообслуживание) Есть живая музыка (Да/Нет) Есть винная карта (Да/Нет) итп. Очевидно, что для хранения вариантов ответов нужно использовать справочники. Если под каждый вопрос создавать отдельный справочник (Запчасти к каким машинам продают, Тип кухни, Какие запчасти продают, Тип обслуживания итд.), то потребуется создать 190 справочников. Альтернатива - создать одну таблицу для всех вопросов и специальное поле, которое указывает к какому вопросу относится вариант ответа. вторая таблица, про которую Вы говорите - это таблица связи анкеты с вариантами ответов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2009, 17:08 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
spРассматривая ваши 190 справочников не увидел здесь одной таблицы в упор - тут 2 таблицы: -категории (SPORT_COMMON, SPORT_FIRM_TYPE...) -список значений для категории(Ракетки, мячи, сетки и др. для большого тенниса, Продажа товаров для спорта и отдыха...) зачем 190 справочников или все в одной таблице ... не пойму!!! проблема в постановке и анализе задачи!Точнее так. Можно один этот справочник разбить на две таблицы (у нас так и есть). Но кардинально это ничего не меняет. главное, что варианты ответов все лежат в одной таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2009, 17:13 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
BelyspРассматривая ваши 190 справочников не увидел здесь одной таблицы в упор - тут 2 таблицы: -категории (SPORT_COMMON, SPORT_FIRM_TYPE...) -список значений для категории(Ракетки, мячи, сетки и др. для большого тенниса, Продажа товаров для спорта и отдыха...) зачем 190 справочников или все в одной таблице ... не пойму!!! проблема в постановке и анализе задачи!Точнее так. Можно один этот справочник разбить на две таблицы (у нас так и есть). Но кардинально это ничего не меняет. главное, что варианты ответов все лежат в одной таблице. ну так из анализа данных и видно что это не 199 справочников - это один справочник с категориями и реализовывать его в 199 таблицах - глупость и вопрос о реализации его в одной или в 199 таблицах неактуален ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2009, 19:15 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
spну так из анализа данных и видно что это не 199 справочников - это один справочник с категориями и реализовывать его в 199 таблицах - глупость и вопрос о реализации его в одной или в 199 таблицах неактуаленИ в результате получаем возможность прицепить к анкете АВТО ответ "Тип кухни: Японская", что является бредом. PS: понятно, что из двух зол приходится выбирать меньшее... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2009, 10:29 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarerBelyУ нас для таких супер простых вариантов есть таблица SIMPLE_LIST, где есть поле NAME, ID, CATEG_NAME Когда-то, году в 94-м, я работал примерно так же, на клиппере. Потом, когда пришел на Oracle, задал вопрос - а почему бы не сложить простые справочники таким манером. В ответ на что получил просьбу назвать хотя бы одно осмысленное преимущество такой вот "кучи малы" (под неосмысленными я понимаю, например, экономию нескольких килобайт дискового пространства). Попробовал - и не смог. Так до сих пор и не могу, одни минусы. Выгода, собственно, одна - не требуется изменять структуру базы под каждый чих. Так проще как клиентам, так и разработчику (как фирме, а не человеку), особенно если проходится поддерживать десяток-другой разных версий одного и того же продукта. Не надо морочиться со структурой базы при переносе кода из одной версии в другую, ибо и с кодом заморочек хватает. А добавлять подобные справочники приходится достаточно часто (порою в рамках фиксов/патчей), что бы для каждой такой мелочи дожидаться, скажем, релиза, в котором меняется структура базы. И, кстати, да. Самый распостраненный вариант использования таких справочников - EAV. А что делать? Говорит заказчик - хотим этот атрибут через неделю (в лучшем случае)! И что делать? Тащить изменение структуры через все пространства (разработка - тестовое - выпуск) за одну неделю? Не, я видал, конечно, таких героев, но вообще - в топку. EAV имеет вои недостаки (точнее сказать - у него одни только недостатки), но все перекрывается одним достоинтством - скоростью добавления атрибутов. Впрочем, мы уже спорили по этому поводу, но без особого успеха.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2009, 12:05 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Николай1Выгода, собственно, одна - не требуется изменять структуру базы под каждый чих. Добавление справочника имеет смысл только тогда, когда на него кто-то будет ссылаться, а это в нормальном варианте - уже "изменение структуры базы". Итого, чтобы этот аргумент имел смысл, БД ещё и не должна использовать человеческих внешних ключей, подменяя их тем или иным "суперуниверсальным механизмом ссылок чего угодно на что угодно". А в этом случае становится довольно странно видеть "обычные таблицы", особенно если учитывать, что о скорости работы и удобстве написания бизнес-логики речи уже не идёт, а вот для добавления в них атрибутов "требуется изменять структуру базы под каждый чих". Итого получаем, что аргумент имеет смысл только в рамках "общего универсального движка" или на прямом пути к нему. Плюсы и минусы такого подхода... изучены. Религиозный подход фиксов-патчей-релизов я не совсем понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2009, 23:36 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
softwarerНиколай1Выгода, собственно, одна - не требуется изменять структуру базы под каждый чих. Добавление справочника имеет смысл только тогда, когда на него кто-то будет ссылаться, а это в нормальном варианте - уже "изменение структуры базы". Итого, чтобы этот аргумент имел смысл, БД ещё и не должна использовать человеческих внешних ключей, подменяя их тем или иным "суперуниверсальным механизмом ссылок чего угодно на что угодно". А в этом случае становится довольно странно видеть "обычные таблицы", особенно если учитывать, что о скорости работы и удобстве написания бизнес-логики речи уже не идёт, а вот для добавления в них атрибутов "требуется изменять структуру базы под каждый чих". Итого получаем, что аргумент имеет смысл только в рамках "общего универсального движка" или на прямом пути к нему. Плюсы и минусы такого подхода... изучены. Религиозный подход фиксов-патчей-релизов я не совсем понял. Гм. Что же в нем непонятного? Есть большой продукт, который стоит у большого количества клиентов и регулярно (раз в месяц) централизовано обновляется (это, допустим, версия). Если надо сделать что-то срочное, то выпускается фикс. Срок его выпуска - 1 день. Всего есть (упрощенно) три пространства - разработка, тестирование и выпуск. При нормальной разработке сначала все делается в пространстве разработки, потом результат переностится в пространство тестирования, потом - в выпуск. При экстренных изменениях все сразу делается в пространстве выпуска, а потом возвращается "обратно" в разарботку и тестирование. Еще есть десяток клиентов у которых есть свои, более другие, версии. Со своим зоопарком пространств (правда покороче). Ну и представьте, какой объем работы надо будет проделать, если, вдруг, придется изменять структуру базы. Как минимум - это столько же, сколько делается при изменении кода (хотя что-то мне подсказывает, что больше). Ну и надо учесть, что баз обычно больше, чем пространств и достаточно часто практикуется переключение с одной базы на другую по мере надобности. "А теперь у них у всех - разная структура". Что касается использования новых справочников, то я об этом уже писал - EAV. И, таки, да, движок. Добавляем классификатор (тот самый, универсальный), дополнительный атрибут и - телемаркет. Пользователь может работать. Если этот реквизит нужен только на экране и при печати, то ничего кодировать не нужно вообще. Если где-то еще, то надо написать это самое "еще". Не понимаю, кстати, религиозных выпадов типа, "тогда все надо сложить в одну таблицу" или "тогда все в EAV". Зачем? В EAV попадает только то, что a) нужно срочно б) не требует никакой обработки, кроме ввода, отображения и печати. Остальное лежит в "обычных" таблицах. Кстати, далеко не все данных из таких "справочников" сохраняются в базе. Некоторые могут использоваться исключительно для управления некими процессами. Например - операций экспорта/импорта, для указания соответствия внутренних и внешних кодировок. Что же касается пресловутой "ссылочной целостности", то проблемы, порожденные ее отсутствием, составляют, хорошо если 5% от общего числа проблем приложения (из моей более чем 15 летней практики сопровождения тиражных продуктов). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2009, 13:05 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Belyspну так из анализа данных и видно что это не 199 справочников - это один справочник с категориями и реализовывать его в 199 таблицах - глупость и вопрос о реализации его в одной или в 199 таблицах неактуаленИ в результате получаем возможность прицепить к анкете АВТО ответ "Тип кухни: Японская", что является бредом. PS: понятно, что из двух зол приходится выбирать меньшее... где вы такое увидели из моего поста??? там если есть КАТЕГОРИЯ (тут я мигаю вам глазом) авто , то там и будет вашая "японская", а в категории про кухню (тут я опять мигаю вам глазом) будет все что относится к кухне - это же иерархический справочник КАТЕГОРИЯ-ПОДКАТЕГОРИИ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2009, 14:19 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
spBelyspну так из анализа данных и видно что это не 199 справочников - это один справочник с категориями и реализовывать его в 199 таблицах - глупость и вопрос о реализации его в одной или в 199 таблицах неактуаленИ в результате получаем возможность прицепить к анкете АВТО ответ "Тип кухни: Японская", что является бредом. PS: понятно, что из двух зол приходится выбирать меньшее... где вы такое увидели из моего поста??? там если есть КАТЕГОРИЯ (тут я мигаю вам глазом) авто , то там и будет вашая "японская", а в категории про кухню (тут я опять мигаю вам глазом) будет все что относится к кухне - это же иерархический справочник КАТЕГОРИЯ-ПОДКАТЕГОРИИДумаем над заполнением анкет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2009, 11:19 |
|
||
|
Однотипные таблицы
|
|||
|---|---|---|---|
|
#18+
Пока ниасилил все до конца, но суть ясна, одна таблица или много, вот в чем вопрос. У меня ситуация такая. Имею 9 баз под одну систему. В каждой базе присутствуют, как и полагается, термины. Т.к. мы используем подход общения с клиентом только через хранимые процедуры, то использовать множественные таблицы - слишком накладно. Это куча однотипных хранимок, например. Поэтому я больше склоняюсь к одной таблице в каждой базе с унифицированным интерфейсом. Но вот вопрос: что должен харкодить клиент? Идентификаторы каждой категории? Каждого термина? А если добавится новый термин в категории? Приведу пример построенного классификатора: ID_Term int TermNode hierarchyid Name nvarchar(50) Icon varbinary(MAX) Структура на примере типов файлов: --Пол | --Тип файлов | --Видео | | | ---avi | ---mpg --Аудио | ---mp3 В клиенте харкодить идентификаторы категорий? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2010, 15:08 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1542889]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
172ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
144ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 568ms |

| 0 / 0 |
