powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Однотипные таблицы
177 сообщений из 177, показаны все 8 страниц
Однотипные таблицы
    #34527371
s785
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте
Есть Delphi6+FB 2.0.1+IBX. В базе куча однотипных таблиц-справочников. Структуру имеют: ключевое поле c названием "ID" и поле данных с названием "NAME". Вопрос в том, не будет ли в будущем каких-либо сложностей при однинаковом названии полей во многих таблицах? Насколько это критично?
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34527402
ytrewq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если будешь использовать алиасы то не будет. а одна таблица не пойдьот для справочников с parent_id ?
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34527448
NoName 2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
s785Здравствуйте
Есть Delphi6+FB 2.0.1+IBX. В базе куча однотипных таблиц-справочников. Структуру имеют: ключевое поле c названием "ID" и поле данных с названием "NAME". Вопрос в том, не будет ли в будущем каких-либо сложностей при однинаковом названии полей во многих таблицах? Насколько это критично?
Не будет, если обращаться к полям в запросах так: "Имя_таблицы"."Имя_поля"
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34527646
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ytrewqесли будешь использовать алиасы то не будет. а одна таблица не пойдьот для справочников с parent_id ?

По мере расширения решаемых задач записи справочника обрастают дополнительными атрибутами и превращаются в полноценные сущности.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34528343
s785
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответы, немного успокоился. Пока единственное замеченное неудобство состоит в том, что в design-time при настройке компонент, если в них фигурирует запрос, связывающий две подобные таблицы, то список полей для выбора выглядит как: "ID, ID1, NAME, NAME1..."
Таким образом, можно сделать вывод, что так обзывать поля есть нормальная практика, не приводящая к серьёзным осложнениям в будущем?
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34528781
Tyo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При росте кол-ва справочников начнете забывать -- что в какой таблице.
Я бы голосовал за подход, предложенный ytrewq. Сам использую именно такой.
Ведение справочников облегчается и формализуется.
А если возникнут индивидуальные атрибуты -- прикрутите в доп. таблице, опять-таки одной на всех.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34529119
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s785Таким образом, можно сделать вывод, что так обзывать поля есть нормальная практика, не приводящая к серьёзным осложнениям в будущем?
Практика нормальная, никаких осложнений не предвидится.

Я поступаю несколько иначе - "широко распространенные" имена полей квалифицирую именем сущности, то есть organization_name, goods_qnt итп. Для меня это несколько удобнее, но причины в общем достаточно мелки - уровня того, что Вы назвали с NAME1.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34529131
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TyoПри росте кол-ва справочников начнете забывать -- что в какой таблице.


TyoВедение справочников облегчается и формализуется.


TyoА если возникнут индивидуальные атрибуты -- прикрутите в доп. таблице, опять-таки одной на всех.
Cтранно, что Вы до сих пор не пришли к идее хранить всю базу в одной таблице. Или к EAV.

TyoСам использую именно такой.
Этот аргумент понятен.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34529154
Tyo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TyoА если возникнут индивидуальные атрибуты -- прикрутите в доп. таблице, опять-таки одной на всех.
Cтранно, что Вы до сих пор не пришли к идее хранить всю базу в одной таблице. Или к EAV.

Ну дык любое мнение можно представить в идиотском свете, если его абсолютизировать. :)
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34529289
kass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TyoПри росте кол-ва справочников начнете забывать -- что в какой таблице.
Если по человечески назвать :), то не забудешь.
Но я тоже за подход: все справочники в одной таблице.

TyoЯ бы голосовал за подход, предложенный ytrewq. Сам использую именно такой.
Ведение справочников облегчается и формализуется.
+1

TyoА если возникнут индивидуальные атрибуты -- прикрутите в доп. таблице, опять-таки одной на всех.
Если одна на всех, то зачем дополнительная? Добавляешь в таблице справочников достаточное количество полей нужных типов и любуешься :)
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34529398
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Tyo, Kass
Расскажите пожалуйста, как вы обеспечиваете ссылочную целостность?
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34529690
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TyoПри росте кол-ва справочников начнете забывать -- что в какой таблице.
Я бы голосовал за подход, предложенный ytrewq. Сам использую именно такой.
Ведение справочников облегчается и формализуется.
А если возникнут индивидуальные атрибуты -- прикрутите в доп. таблице, опять-таки одной на всех.ЗачОт!Жги ещё!
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34537924
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s785 пишет:
> Структуру имеют: ключевое поле c названием "ID" и поле данных с
> названием "NAME". Вопрос в том, не будет ли в будущем каких-либо
> сложностей при однинаковом названии полей во многих таблицах? Насколько
Нет, не будет.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34538443
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле, может, наоборот, сильно облегчить жизнь при написании интерфейса к этим справочникам, т.к. позволит нарисовать одну универсальную форму для всех справочников
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34538707
Фотография Palarm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНа самом деле, может, наоборот, сильно облегчить жизнь при написании интерфейса к этим справочникам, т.к. позволит нарисовать одну универсальную форму для всех справочников Но только одной формой к сожалению не удается обойтись.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34538955
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Palarm авторНа самом деле, может, наоборот, сильно облегчить жизнь при написании интерфейса к этим справочникам, т.к. позволит нарисовать одну универсальную форму для всех справочников Но только одной формой к сожалению не удается обойтись.
ИМХО это уже к вопросу о проектировании приложения ))))
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34544042
Фотография Анатолий Иванов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо все-таки разделять модель и представление. Почему это база должна проектироваться с учетом того, чтобы в приложении удобно было в одном окне все показывать?

Анатолий
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34544659
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ИвановНадо все-таки разделять модель и представление. Почему это база должна проектироваться с учетом того, чтобы в приложении удобно было в одном окне все показывать?

Анатолий
Вы правы, не должна ))), это просто побочное полезное следствие, и грех им не воспользоваться, коли уж так вышло
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34545361
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab ytrewqесли будешь использовать алиасы то не будет. а одна таблица не пойдьот для справочников с parent_id ?
По мере расширения решаемых задач записи справочника обрастают дополнительными атрибутами и превращаются в полноценные сущности.Не всегда.
Например список типов улиц (ул., б-р, ш. итд.)

У нас для таких супер простых вариантов есть таблица SIMPLE_LIST, где есть поле NAME, ID, CATEG_NAME

Разделение происходит именно по CATEG_NAME.

Перед тем как сохранять справочник в такой таблице - надо сильно подумать, не добавится ли что-нибудь.
Если есть шанс, что таблица потребует расширения - лучше создать отдельную.

Реальной выгоды по запоминанию имен - не происходит.
Вместо того, чтобы помнить имя таблицы, приходится помнить имя категории.

Немного легче искать по значению.
Но это не критично.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34545668
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelyУ нас для таких супер простых вариантов есть таблица SIMPLE_LIST, где есть поле NAME, ID, CATEG_NAME
Когда-то, году в 94-м, я работал примерно так же, на клиппере. Потом, когда пришел на Oracle, задал вопрос - а почему бы не сложить простые справочники таким манером. В ответ на что получил просьбу назвать хотя бы одно осмысленное преимущество такой вот "кучи малы" (под неосмысленными я понимаю, например, экономию нескольких килобайт дискового пространства). Попробовал - и не смог. Так до сих пор и не могу, одни минусы.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34546656
s785
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только что накопал:
Oracle Naming Conventions
Fields should be unique within the database schema.

Призадумался :)
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34547484
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelyВместо того, чтобы помнить имя таблицы, приходится помнить имя категории.
В этом-то и суть: по категории универсальная прога найдет что нужно, а по имени таблицы ? динамический sql ? а ошибки, ну и т.д.
зы для доп. признаков есть разные решения
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34557379
OraNew2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerКогда-то, году в 94-м, я работал примерно так же, на клиппере. Потом, когда пришел на Oracle, задал вопрос - а почему бы не сложить простые справочники таким манером. В ответ на что получил просьбу назвать хотя бы одно осмысленное преимущество такой вот "кучи малы" (под неосмысленными я понимаю, например, экономию нескольких килобайт дискового пространства). Попробовал - и не смог. Так до сих пор и не могу, одни минусы.

У меня сейчас как раз стоит вопрос проектирования простых справочников (от 2-ух до 10 записей) для Oracle.
Не могли бы вы подробнее аргументировать какие минусы хранения простых справочников в одной таблице, какие плюсы при создании множества простых таблиц-справочников именно для Oracle. Спасибо.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34557518
SPQR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer...назвать хотя бы одно осмысленное преимущество такой вот "кучи малы" (под неосмысленными я понимаю, например, экономию нескольких килобайт дискового пространства). Попробовал - и не смог. Так до сих пор и не могу, одни минусы.
Например, унификация кода, что может сократить время разработки и снизить кол-во ошибок.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34557867
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SPQRНапример, унификация кода
Простите, это смешно, и если не ошибаюсь, уже упоминалось выше. В современных средствах разработки ни к какой дополнительной унификации кода это не приводит; если средство не позволяет редактировать одной формой разные таблицы - ему место в помойке, а не среди аргументов.

Под "одной формой" я имею в виду вовсе не обязательно один экземпляр класса, а нечто вроде "одного многократно используемого кода" - скажем, базовую форму "справочника" вместе с наследниками.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34557898
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer В современных средствах разработки ни к какой дополнительной унификации кода это не приводит... Более того, приводит к появлению в коде большого количества "магических цифр" или "магических слов" - так как эти категории надо как-то ведь ещё и различать
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34557957
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OraNew2007Не могли бы вы подробнее аргументировать какие минусы хранения простых справочников в одной таблице, какие плюсы при создании множества простых таблиц-справочников именно для Oracle. Спасибо.
Oracle вряд ли отличается здесь от других сходных СУБД. Аргументация следующая:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Код: plaintext
SELECT * FROM DICT_STREET_TYPE st

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

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

select * from DICT_STREET_TPE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

softwarer
iscrafmпостроить систему можно по разному.
Можно. Можно вообще положить всю БД в одну таблицу. И если коллега утверждает, что в этом есть некий цимес - пытаюсь выяснить, какой именно.
речь идет об однотипных таблицах, не заметили?
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34559571
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych2 iscrafm : О, Nav! Яркий пример Вашего подхода - но там хотя-бы понятно, зачем так делается - чтобы денег лишних не платить за каждую таблицу.... да и строго говоря - Navision - не реляционная БД
Это не пример моего подхода. Он был приведен в пример совсем с другой целью. И конечно же Navision не является реляционной БД, это ERP система.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34559615
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можем тут поспорить ещё, что такое ERP - системы, используются-ли в них БД, релятивистские-ли они и т.д. и т.п., но не хочется, если честно.
Чего хотелось, так понять, в чём преимущества хранения всех справочников в одной таблице перед созданием для каждого справочника таблицы отдельной. Услышал аргументы - облегчённый "поиск по значению", "у нас так сделано" и "проблем ещё не было" - согласитесь, что солидной эту базу доказательств не назвать?
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34559638
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmнет, документы в данном случае - однотипные таблицы
Понятно. То есть чукча не читатель, главное встрять и что-нибудь ляпнуть.

iscrafm, то о чем речь в теме идет.
Попробуйте что ли прочитать тему. Хотя бы первое письмо, если уж на большее сил не хватает.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34559655
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychМожем тут поспорить ещё, что такое ERP - системы, используются-ли в них БД, релятивистские-ли они и т.д. и т.п., но не хочется, если честно.
Чего хотелось, так понять, в чём преимущества хранения всех справочников в одной таблице перед созданием для каждого справочника таблицы отдельной. Услышал аргументы - облегчённый "поиск по значению", "у нас так сделано" и "проблем ещё не было" - согласитесь, что солидной эту базу доказательств не назвать?
Во всех этих вопросах проскальзывает одно желание - не возиться с переделкой БД.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34559664
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychЧего хотелось, так понять, в чём преимущества хранения всех справочников в одной таблице перед созданием для каждого справочника таблицы отдельной.Да их, в общем-то и нет. Разные справочники, как правило, описывают разные сущности с разным набором свойств, поэтому для того, чтобы поместить их все в одну таблицу, надо приложить немало усилий, и, как говориться в одном анекдоте, быть "очень сильным". Другое дело, когда речь идет о частном случае справочников, если так можно выразиться, - классификаторах, которые имеют стандартный и ограниченный набор свойств, чаще всего это некий код и наименование(описание). В таком случае есть огромный соблазн "засунуть" их все в одну таблицу, с целью сократить усилия на написание и дублирование кода, который ими оперирует. Полагаю, это желание и есть основная причина, по которой нечто, вообще говоря - достаточно разнородное, пытаются "впихнуть" в одну таблицу. И тут же появляется маленький "бонус", теоретически пользователи могут сами добавлять новые виды классификации, при желании - иерархической. На мой взгляд, такое "слияние" не очень оправдано, тем более, что она чревато, но если соблазн есть, то всегда найдутся те, кто ему уступит. Как мне кажется, в таких случаях программисты просто перекладывают ответственность с себя на пользователя. Типа, на вот тебе конструктор, что захочешь, то и наваяешь. И наваяют, наблюдались прецеденты, Россия, по крайней мере, "сильными" особями не обделена.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34559665
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават ЮсифовВо всех этих вопросах проскальзывает одно желание - не возиться с переделкой БД.
Забавно :-) А надо было переделывать? Спор, вроде, теоретический.....
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34559676
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ChA: +1
ЗЫ Непонятен только напор "апологетов" )))))))
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34559696
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych2 ChA: +1
ЗЫ Непонятен только напор "апологетов" )))))))
Когда будете жить только на средства вырученные от продаж и обслуживания своих программ будет понятно.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34559703
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жесть! а я на какие средства живу, интересно? ну Вы, блин, даёте!
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34559892
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават ЮсифовВо всех этих вопросах проскальзывает одно желание - не возиться с переделкой БД.
Проскальзывает навязчивая идея....
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34560142
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychЖесть! а я на какие средства живу, интересно? ну Вы, блин, даёте!
Откуда я знаю? Вы кто, свободный художник? Наемник?
Если последнее, то я не считаю, что Вы живете ... Это Ваш хозяин живет от продаж и т.д.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34560218
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават ЮсифовОткуда я знаю? ... Вот именно, не знаете ... Замутим тему "обсуди коллегу"?
Таким образом дошли уже до аргумента "мал ещё, дорастёшь - поймёшь", следующий пункт маршрута - "сам дурак?" доказательная база расширяется стремительно
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34560255
hammersmith
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы забыли еще один важный аспект - если справочники в одной таблице и нужно, чтобы пользователь Вася видел только один набор справочников, а Петя - другой, то что в этом случае делать???

В случае "Один справочник - Одна таблица" все решается на уровне БД: раздал нужные гранты и спи спокойно!
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34560407
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hammersmithВы забыли еще один важный аспект
Я бы не назвал этот аспект важным. Во-первых, это обычная row-level security, ничего военного. Во-вторых, ситуация "пользователь А не должен видеть тривиального справочника Б" исчезающе редка. Подчеркну - речь не идет о справочнике клиентов, оргструктуре предприятия и прочем "явно неоднотипном", речь о куда более простых и в общем общеизвестных данных. И наконец, куда чаще задача доступа оказывается не в "запретить доступ к справочнику", а "разрешить видеть только некоторые позиции справочника", то есть опять-таки row-level security.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34560428
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Суть вопроса -
1. надо ли создавать так называемые справочники-классификаторы ввиде жестких таблиц БД (одна или много не имеет значения)?
2. Как совместить в таких справочниках "носки" с "топор"? :)
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34560478
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават ЮсифовСуть вопроса -
1. надо ли создавать так называемые справочники-классификаторы ввиде жестких таблиц БД (одна или много не имеет значения)?
Зависит от того, что вы собираетесь там хранить.
Если названия типов улиц - то почему бы и нет.

Сахават Юсифов2. Как совместить в таких справочниках "носки" с "топор"? :)
Просто!

Код: plaintext
1.
INSERT INTO simple_list (NAME) values ('Носки');
INSERT INTO simple_list (NAME) values ('Топор');

Или вы опять о каком-то своем хитро вымученном классификаторе к которому потом будете прикручивать кучу немерянной функциональности?
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34560537
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bely
Или вы опять о каком-то своем хитро вымученном классификаторе к которому потом будете прикручивать кучу немерянной функциональности?

Угу. :)
Из 30 летнего опыта - любая программа с жизненным циклом больше 3 лет потихоночку движется в направлении объектной кучи и внешних классификаторов. к 7-10 году она полнофункциональна, избыточна и ,к сожалению, мертва. :(
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34560680
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerПопробуйте что ли прочитать тему. Хотя бы первое письмо, если уж на большее сил не хватает.
Могу только посоветовать Вам сделать тоже самое.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34560777
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават ЮсифовИз 30 летнего опыта - любая программа с жизненным циклом больше 3 лет потихоночку движется в направлении объектной кучи и внешних классификаторов. к 7-10 году она полнофункциональна, избыточна и ,к сожалению, мертва. :(
Если она изначально не сделана как безразмерная объектная классифицируемая куча.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34560787
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод Сахават ЮсифовИз 30 летнего опыта - любая программа с жизненным циклом больше 3 лет потихоночку движется в направлении объектной кучи и внешних классификаторов. к 7-10 году она полнофункциональна, избыточна и ,к сожалению, мертва. :(
Если она изначально не сделана как безразмерная объектная классифицируемая куча.
Хорошо хоть Вы есть. :)
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34561247
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават ЮсифовСуть вопроса -
1. надо ли создавать так называемые справочники-классификаторы ввиде жестких таблиц БД (одна или много не имеет значения)?
2. Как совместить в таких справочниках "носки" с "топор"? :)
Картина такая: "носки" и "топор" - это товары - справочник Товары со своей оригинальной (по отношению к другим справочникам) структурой. Структура справочников определяется пользователем и автоматом отображается на жесткую структуру БД. Но "носки" - это одежда, а "топор" - инструмент. Одежда и инструмент - элементы классификатора Вид товара. Набор классификаторов определяется тоже пользователем. Их иерархическая структура фиксирована.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34561446
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод Сахават ЮсифовСуть вопроса -
1. надо ли создавать так называемые справочники-классификаторы ввиде жестких таблиц БД (одна или много не имеет значения)?
2. Как совместить в таких справочниках "носки" с "топор"? :)
Картина такая: "носки" и "топор" - это товары - справочник Товары со своей оригинальной (по отношению к другим справочникам) структурой. Структура справочников определяется пользователем и автоматом отображается на жесткую структуру БД. Но "носки" - это одежда, а "топор" - инструмент. Одежда и инструмент - элементы классификатора Вид товара. Набор классификаторов определяется тоже пользователем. Их иерархическая структура фиксирована.
Я вопросов то не задавал. :) Хотя приятно получить хорошие ответы.
Кстати, справочники - тоже классификаторы. :)
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34577938
RMih
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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, в которой хранятся разнотипные объекты, такие как таблицы, первичные ключи, ограничения уникальности, пользовательские функции, хранимые процедуры и т.д. ?

Ведь так в СИСТЕМНЫХ таблицах теоретически могут появиться неверные ссылки, например вместо ссылки на хранимую процедуру будет ссылка на первичный ключ.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34578009
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMihНо почему Microsoft использует таблицу sysobjects в SQL Server 2000, в которой хранятся разнотипные объекты, такие как таблицы, первичные ключи, ограничения уникальности, пользовательские функции, хранимые процедуры и т.д. ?

Ведь так в СИСТЕМНЫХ таблицах теоретически могут появиться неверные ссылки, например вместо ссылки на хранимую процедуру будет ссылка на первичный ключ.1. Например, для того, чтобы гарантировать, что в базе не появится 2 разных объекта с двумя одинаковыми именами.
Например индекс ТТ1 и таблица ТТ1.

2. SQL сервер, это не совсем приложение, которое работает с БД.
Это сама БД. И если лазать в системных словарях руками (а не через сервер), то чудес может быть больше чем ожидается.
Сам же сервер - лазает правильно и является гарантом того, что ничего лишнего не появяится (как президент).
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34578124
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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-процессом, написанном единомоментно, тестируемом целиком и весьма тщательно, довольно небольшим по коду и обвешанным теми же проверками. Я мог не опасаться, что кто-то другой напишет процедуру, которая лезет править данные и портит их.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34578435
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerЕсли Вас утешит, в Oracle использован другой подход - таблицы, представления, процедуры и все прочее описывается в различных системных таблицах. Как насчет ALL_OBJECTS ?
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34578544
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bely softwarerЕсли Вас утешит, в Oracle использован другой подход - таблицы, представления, процедуры и все прочее описывается в различных системных таблицах. Как насчет ALL_OBJECTS ?
Как? Да очень просто....

Код: plaintext
1.
2.
3.
4.
5.
SQL> select object_type from all_objects where object_name = 'ALL_OBJECTS';

OBJECT_TYPE
-------------------
VIEW
SYNONYM

Неужели это новость? Тут уж если спрашивать, можно было бы спросить про табличку SYS.OBJ$. Она действительно общая для всех объектов, но в ней лежат по сути только заголовки, общий минимум информации - типа id-name-status - а основная часть информации размещается в SYS.TAB$, SYS.VIEW$ и так далее.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34578637
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerТут уж если спрашивать, можно было бы спросить про табличку SYS.OBJ$. Она действительно общая для всех объектов, но в ней лежат по сути только заголовки, общий минимум информации - типа id-name-status - а основная часть информации размещается в SYS.TAB$, SYS.VIEW$ и так далее.
Гы гы гы, тогда можно сказать что в случее SUBJ мы храним в таблице simples_list : id, тип, наименование. А все остальное в DICT_STREET_TYPE... ;-)
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34578657
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Шутка конечно, но на мой взгляд оба подхода равнозначны, обладая своими плюсами и минусами. Уж по крайней мере смысла в переделке из одного варианта в другой никакого нет.

А обсуждение из серии "А стоит ли писать в коде имя переменной с большой буквы"
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34578658
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Estets softwarerТут уж если спрашивать, можно было бы спросить про табличку SYS.OBJ$. Она действительно общая для всех объектов, но в ней лежат по сути только заголовки, общий минимум информации - типа id-name-status - а основная часть информации размещается в SYS.TAB$, SYS.VIEW$ и так далее.
Гы гы гы, тогда можно сказать что в случее SUBJ мы храним в таблице simples_list : id, тип, наименование. А все остальное в DICT_STREET_TYPE... ;-)Ничего подобного - сказать можно, но это совсем другая структура и другой смысл.

Как насчет вот этого?
Bely1. Например, для того, чтобы гарантировать, что в базе не появится 2 разных объекта с двумя одинаковыми именами.
Например индекс ТТ1 и таблица ТТ1.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34578885
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EstetsГы гы гы, тогда можно сказать что в случее SUBJ мы храним в таблице simples_list : id, тип, наименование. А все остальное в DICT_STREET_TYPE... ;-)
Против такого подхода в случае subj я и не собираюсь возражать, сам иногда использую. Правда, в случае справочников не стал бы - геморроя больше, чем выгоды.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34578904
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EstetsP.S. Шутка конечно, но на мой взгляд оба подхода равнозначны, обладая своими плюсами и минусами.
Не смешивайте понятия "равнозначны" и "обладая своими плюсами и минусами".

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

Estets Уж по крайней мере смысла в переделке из одного варианта в другой никакого нет.
Эта мысль далее всего от истины. Смысл переделки в том, чтобы избавиться от существенно мешающих в данном конкретном случае минусов одного варианта и добиться существенно помогающих в данном конкретном случае плюсов другого варианта.

Чтобы проиллюстрировать.... скажем, с давних времен известно два подхода к оптимизации - "по скорости выполнения" и "по потребляемой памяти". Дык вот, Ваша фраза аналогична фразе "нет никакого смысла менять один подход к оптимизации на другой".

Наконец, что касается именно архитектуры "все в одном" в случае именно таблиц-справочников в БД, "помогающие плюсы" практически отсутствуют (в топике не было названо ни одного), "мешающие минусы" я назвал.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34580995
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerНаконец, что касается именно архитектуры "все в одном" в случае именно таблиц-справочников в БД, "помогающие плюсы" практически отсутствуют (в топике не было названо ни одного)
Уже было, но повторюсь: универсальная программа подхватит появление нового раздела в одной таблице, а вот пояление новой таблицы можно подхватить только динамическим SQL со всеми вытекающими.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34581029
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
модУже было, но повторюсь: универсальная программа Где такие есть? ДАЙТЕ ДВЕ!!!
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34581163
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод softwarer...в случае именно таблиц-справочников...
...универсальная программа подхватит появление нового раздела в одной таблице...
Если это всего лишь новый раздел (справочника) - так ему там и место (в той же таблице).
А вот если это новый справочник, новое "измерение" - с соотв.связями в таблицах "фактов", с соотв.элементами GUI, с соотв.ограничениями на значения, соотв.кусками кода и т.д., то трудно представить насколько "универсальной" должна быть такая программа...
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34581164
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
модУже было, но повторюсь: универсальная программа подхватит появление нового раздела в одной таблице, а вот пояление новой таблицы можно подхватить только динамическим SQL со всеми вытекающими.
Напугали ежа голым задом :)

В данном случае уместно посмотреть на такую категорию универсальных программ, как СУБД - тем паче, что только что обсуждали конструкцию системных таблиц. Вот уж кто легко мог бы реализовать такой вот "универсальный подход с появлением нового раздела в таблице", вместе со всеми EAV - ан нет, почему-то их "динамический sql" ну совершенно не пугает.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34581567
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод
Уже было, но повторюсь: универсальная программа подхватит появление нового раздела в одной таблице, а вот пояление новой таблицы можно подхватить только динамическим SQL со всеми вытекающими.
И вновь продолжается бой
Особенно здорово будет, если этот новый раздел должен по-разному обрабатываться для разных категорий, или он не будет иметь смысла для некоторых категорий, или ... - можно долго продолжать список, общее здесь - для универсальной программы всё одно придётся прикручивать новые правила для обработки/отображения этого нового раздела. И всё равно придётся вносить изменения в код такой универсальной программы - найдите, что называется, 7 отличий...
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34581924
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerНапугали ежа голым задом :)
В данном случае уместно посмотреть на такую категорию универсальных программ, как СУБД
Кота сметаной :). Уровни разные: СУБД и ее прикладнуха. Теоретически действительно можно все сделать на динамических sql, но на практике это довольно не просто, не говоря уж о производительности.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34581950
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychОсобенно здорово будет, если .....
А если не будет ? Предполагать можно что угодно, а на практике подход оказывается полезным, вот вам и критерий истины.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34582182
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
модУровни разные: СУБД и ее прикладнуха.
Именно что разные. Для СУБД такие вот "разнообразные таблицы" - основная функциональность, а не третьестепенная функция. Производители СУБД имеют возможность протестировать свое решение куда лучше, чем производители прикладного софта. Производители СУБД уверены, что даже если кто-то и полезет в эти таблицы грязными руками, техподдержка пошлет его в пешее эротическое. И все равно почему-то не делают. А авторы прикладух, видимо, храбрее :)

модТеоретически действительно можно все сделать на динамических sql,
Во-первых, не надо про "все", от "всего" в обсуждаемой теме справочников и одного процента не наберется.

модно на практике это довольно не просто,
Да бросьте.

Код: plaintext
1.
2.
3.
Query.SQL.Text := 'select id, name from &Dictionary' ;
Query.InsertSQL := 'insert into &Dictionary ( id, name ) values ( &Dictionary_seq.nextval, :new_name )' ;
....
Query.Macro [ 'Dictionary' ].Value := 'Xyz' ;

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

модА причем тут справочники, речь о подходе.
Справочники при том, что это основная заданная тема.

Что касается "подхода во всей широте", то говорить об универсальной программе, которая подхватит заданную структуру данных можно (хотя далеко не факт, что стоит), однако рассуждать при этом о трудностях динамического кодирования - напомню, это тот Ваш аргумент, который мы обсуждаем - просто смешно.

мод softwarerДа бросьте.
Для языков типа делфи динамический sql это нормально, но я не пишу на делфи
Вот и не надо выдвигать как общее правило - "будет непросто" - то, что верно для редкого частного случая используемого Вами инструмента. Более того, я твердо уверен в том, что технология должна влиять на выбор инструмента, а не наоборот - иначе говоря, если Вам нужны "динамические таблицы", надо выбрать инструмент, который может с ними нормально работать, а не корежить архитектуру под недостатки инструмента.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34583664
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 кнопок/пунктов меню в клиентской.

Выбор за вами ;-)
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34583910
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 кнопок/пунктов меню в клиентской.
Этот аргумент выглядит столь замечательно, что я цитирую его целиком. Тема замечательно соответствует недавно отгремевшей войне на тему многозвенного мышления и привычки многих не понимать разницы между структурой данных и отображением этих данных в интерфейсе.

Итак, Вы умеете отобразить "справочник категорий" в комбобоксе (или чем там), и, видимо, не умеете отобразить его же в виде ста девяноста пунктов меню. Вы умеете отобразить "справочник таблиц" в виде ста девяноста пунктов меню и не умеете отобразить его же в виде комбобокса (или чего там). И как результат, интерфейс ввода является аргументом при выборе структуры данных. Бесподобно. Я бы даже сказал, феноменально логично.

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

Существенно уникальные триггера - встречаются гораздо реже, чем вот такие типовые.

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

Bely - Вставляют ID из последовательности
Отказался из соображений производительности. Лучше явно закодировать nextval в паре мест.

Bely - Выставляют автоматом дату создания и дату модификации записи
- Записывает USER_ID создателя и кто обновлял последний раз
Во-первых, откройте для себя default sysdate/user. Во-вторых, когда-то я работал с таким аудитом, но так и не понял прелести - поскольку нафиг теряется информация "кто предпоследний"... Тут уж если делать, то полностью.

Bely - запрещают изменять ID записи
Хм. А нафига? Хотя в принципе можно - если повесить триггер on update when (old.id <> new.id), тот не будет заметно тормозить.

BelyСущественно уникальные триггера - встречаются гораздо реже, чем вот такие типовые.
В последнее время в том, что делаю я, редко встречаются "существенно уникальные триггера" и вообще не встречается других.

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

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.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34584444
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer Bely - Выставляют автоматом дату создания и дату модификации записи
- Записывает USER_ID создателя и кто обновлял последний раз
Во-первых, откройте для себя default sysdate/user. Во-вторых, когда-то я работал с таким аудитом, но так и не понял прелести - поскольку нафиг теряется информация "кто предпоследний"... Тут уж если делать, то полностью.А если полностью - то он у вас не на триггерах будет?
И для каждой таблицы триггера разные писать или опять типовой?
Подозреваю, что типовой - а значит опять скатываемся к генерации типового триггера.
Только с другой функциональностью.

Про пользователя - он у нас не ORACLE USER - он "пользователь системы".
USER_ID сохраняется в контексте сессии и записывается туда программами.
Так что DEFAULT VALUE - не проходит.
Да и дату обновления туда не запишешь.

softwarer BelyСущественно уникальные триггера - встречаются гораздо реже, чем вот такие типовые.
В последнее время в том, что делаю я, редко встречаются "существенно уникальные триггера" и вообще не встречается других. Сам же говорил, что это "личные проблемы"
Если кто-то что-то не использует, то это не значит что такого в жизни нет.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34584477
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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В данном случае "генерить идиотские хранимки" было частью технического задания на разработку приложения и было установлено заказчиком,
Замечательно. Итак, это обвинение с Вас снято, но возникает вопрос: почему Вы преподнесли разовый идиотизм заказчика как глобальный недостаток технологии? Полагаете, это корректно?
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34584522
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelyА если полностью - то он у вас не на триггерах будет?
Думаю, нет.

BelyПро пользователя - он у нас не ORACLE USER - он "пользователь системы".
:( Ну значит SYS_CONTEXT.

BelyСам же говорил, что это "личные проблемы"
Ну так и отвечает на такие же "личные проблемы", ситуация симметрична. Скажу так: когда-то у меня тоже было море триггеров, но чем больше я работаю, тем меньше их становится. Причем не потому, что они плохи как идея, а потому, что они слишком много тормозят и мешают - и становится лучше выбрать альтернативное решение без триггеров.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34584543
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerВ своих внутренних динамических структурах.
В файлах с постоянной длиной записи-блока.
softwarerрассуждать при этом о трудностях динамического кодирования просто смешно./quot]
Мне не очень - времени жалко.
[quot softwarer] для редкого частного случая используемого Вами инструмента
pl/sql - точно экзотика
softwarerтехнология должна влиять на выбор инструмента
Это верно, и именно по этому pl/sql, а не делфя или с++.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34584569
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод softwarerВ своих внутренних динамических структурах.
В файлах с постоянной длиной записи-блока.
Верно. Вы еще вспомните, что вся информация в компьютерах состоит из записей постоянной длины (1 байт).... И тем не менее, из них складываются динамические структуры.

мод softwarer для редкого частного случая используемого Вами инструмента
pl/sql - точно экзотика
Для кодирования гуя - безусловно.

мод softwarerтехнология должна влиять на выбор инструмента
Это верно, и именно по этому pl/sql, а не делфя или с++.
Получается странная логика рассуждений. Сначала Вы выбираете инструмент, максимально близкий к БД, а затем из-за сложности инструмента лишаете себя существенной части базового функционала БД (вменяемой автоматической поддержки целостности). Выходит что-то типа "все минусы в одном флаконе".
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34584910
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer EstetsСкипнуто несколько общих рассуждений ;)
То есть Вы с ними согласны?

Я с ними не согласен, как и с многоми далее, но еще раз повторю я никого не собираюсь переубеждать.

Укажу только на две ошибки

softwarer
EstetsРазработка интерфейса для "автоматического рисования по примеру"
Еще раз: если не умеете делать - не говорите, что этого нельзя сделать. На любом нормальном инструменте можно написать одну форму, редактирующую указанную из множества однотипных таблиц. Без всякой дополнительной трудоемкости. Трудоемкость регистрации нового справочника - внесение одной строки в таблицу . Если используемый Вами инструмент так не умеет.... хм, я бы всерьез задумался, нафига он мне нужен.

Вы забыли об одной простой вещи, кроме регистрации справочника вам нужно еще эту таблицу создать и раздать права. А это уже требует другого набора прав у пользователя. Если мы конечно даем право пользователю создавать "Простой справочник". Плюс потенциальная проблема с несоответствием полей в новой таблице образцу, если это делает программист. Плюс еще раз повторю проблема синхронизации данных в справочнике списку таблиц. Если вам кажется что в коллективе даже из десятка программистов все точно знают какую таблицу удалили, изменили или переименовали, то вы неисправимый оптимист.

softwarer
Estetsно не стоит заявлять категорически "Я вижу только минусы и не вижу плюсов".

Тем более не стоит лгать.


Хорошо, звиняюсь точная цитата была
softwarer
что касается именно архитектуры "все в одном" в случае именно таблиц-справочников в БД, "помогающие плюсы" практически отсутствуют (в топике не было названо ни одного), "мешающие минусы" я назвал.

Категоричное и неверное утверждение.

softwarer
EstetsВ данном случае "генерить идиотские хранимки" было частью технического задания на разработку приложения и было установлено заказчиком,
Замечательно. Итак, это обвинение с Вас снято, но возникает вопрос: почему Вы преподнесли разовый идиотизм заказчика как глобальный недостаток технологии? Полагаете, это корректно?
Если Вы считаете требование безопасности "пользователи ни при каких обстоятельствах не имею прямого доступа к таблицам" идиотским, ...

softwarer
Вы этого просто никогда не пробовали и боитесь по религиозным соображениям.


Динамический SQL с клиента закрыт т.к. закрыты таблицы, а за использование динамического SQL на сервере бил по рукам. Можете считать это "религиозными убеждениями" я не против. Слишком много ошибок бывает допущено при написании процедур что бы еще бороться с трудновоспроизводимыми ошибками DynamicSQL.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34585115
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EstetsВы забыли об одной простой вещи, кроме регистрации справочника вам нужно еще эту таблицу создать и раздать права. А это уже требует другого набора прав у пользователя. Если мы конечно даем право пользователю создавать "Простой справочник".
Боюсь, Вы потеряли контекст цитаты. В той фразе, на которую я отвечал, Вы говорили про трудоемкость кодирования кучи форм для редактирования кучи справочников - и это, как мы надеюсь согласны, делает не "пользователь". Ответ относится именно к этому - к тому, что при желании тривиально делается одна форма, редактирующая типовые справочники, и вместо всей описанной Вами трудоемкости остается - вставка строки в конфигурационную таблицу.

Таким образом, моей ошибки здесь нет. Если хотите обсудить новый аспект - проблемы создания новых таблиц пользователем - welcome.

EstetsЕсли вам кажется что в коллективе даже из десятка программистов все точно знают какую таблицу удалили, изменили или переименовали, то вы неисправимый оптимист.
Я неисправимый реалист, и поэтому знаю, что в любом приличном коллективе за несанкционированные изменения структуры БД больно бьют ногами, а для санкционированных применяется комплекс мер, как технических, так и организационных, практически исключающие вероятность проблем.

Estets softwarerТем более не стоит лгать.
Хорошо, звиняюсь точная цитата была
Боюсь, Вы меня неправильно поняли. Я нисколько не обвинял Вас; смысл этой фразы - при выборе между "сказать что-нибудь отличное от категоричной цитаты, которая Вам не понравилась" и "сказать правду", второе для меня предпочтительнее.

EstetsКатегоричное и неверное утверждение.
Категоричное. Верное с точностью до недостатков отдельных инструментальных средств.

EstetsЕсли Вы считаете требование безопасности "пользователи ни при каких обстоятельствах не имею прямого доступа к таблицам" идиотским, ...
Во-первых, не передергивайте. Из озвученного требования совершенно не следует оправдание генерации идиотских хранимок.

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

EstetsДинамический SQL с клиента закрыт т.к. закрыты таблицы, а за использование динамического SQL на сервере бил по рукам. Можете считать это "религиозными убеждениями" я не против. Слишком много ошибок бывает допущено при написании процедур что бы еще бороться с трудновоспроизводимыми ошибками DynamicSQL.
Мне это напоминает того моего начальника на заре моей трудовой деятельности, который пришел в ужас, увидев, что я использовал в коде savepoint-ы, и попробовал устроить мне показательную обструкцию с аргументацией "никогда о таком не слышал, и вообще еще неизвестно, работают они или нет".
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34585384
Alexander Beznin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа,
Ну вы разошлись...

Давно пользую для хранения списков простую структуру из 2-х таблиц

Glossary - оглавление
-------
Glyid (AutoIncrement)
GlyCode (varchar(25))
GlyName (varchar(255))
...

Terms - термины
------
Trmid (AutoIncrement)
GlyCode (varchar(25))
TrmCode (varchar(25))
TrmName (varchar(255))
...
в основных таблицах только символьные коды и ни каких Id
Проверку, если надо, то в тригер
и всё видно, всё понятно

не создавайте себе лишних трудностей, а то ещё каждый вид документа начните в отдельную таблицу класть...
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34585631
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EstetsМинусы подхода 1 справочник - 1 таблица:

1) Разработка серверной и интерфейсной части под каждый новый справочник. Не будем бить себя в грудь утверждая что это занимает мало времени, в случае универсального интерфейса надо вбить 1 строчку в список типов простых справочников с новым кодом и наименованием и все.

2) Поддержка серверной и клиентской части. У нас зарегистрировано в системе 190 типов простых справочников. Это 1 таблица и 4 процедуры на Select, Ins, Upd, Del. В клиентской части это 1 пункт меню список с фильтром и вызываемый из списка редактор. Соответственно для подхода "1х1" это 190 таблиц и 760 процедур в серверной части и 190 кнопок/пунктов меню в клиентской.

Выбор за вами ;-)Странно слышать подобные слова от PowerBuilder разработчика :-)))
Динамическая клиентская часть реализуется от силы парой десятков строк, а тривиальные процедуры, если они так необходимы, можно генерировать автоматически.
IMHO возможность гарантировать ссылочную целостность перевешивает любые минусы, связанные с увеличением (зачастую мнимым) трудоемкости разработки.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34585655
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EstetsМожем создать одно окно и ДропДаунЛистБокс для выбора, но тогда мы столкнемся с необходимостью вести "мета-справочник справочников" где будет храниться информация по справочникам системы и таблицам где они расположены.С этим неплохо справляется любая СУБД. Вам надо всего лишь обратиться к системным таблицам :-) В любом случае вам надо хранить информацию о том, к какому справочнику относится тот или иной набор записей.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34585758
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer Выходит что-то типа "все минусы в одном флаконе".
Я бы сказал - и плюсы и минусы. В этом и сложность выбора, а иначе и проблем бы не было. Вы конечно скажите что проблемы и нет, но откуда тогда постоянно возникающие вопросы (на этом же форуме).
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34585765
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Beznin
не создавайте себе лишних трудностей, а то ещё каждый вид документа начните в отдельную таблицу класть...
Большинство так и делает :) - результат предсказуем !
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34585775
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99IMHO возможность гарантировать ссылочную целостность перевешивает любые минусы, связанные с увеличением (зачастую мнимым) трудоемкости разработки.
IMHO не надо делать из ссылочной целостности идола и приносить ему в жертву функциональность системы.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34585787
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander BezninДавно пользую для хранения списков простую структуру из 2-х таблиц
...
в основных таблицах только символьные коды и ни каких Id
Проверку, если надо, то в тригер
и всё видно, всё понятно

не создавайте себе лишних трудностей, а то ещё каждый вид документа начните в отдельную таблицу класть...Мда... вы, батенька, экстремал...foreign key придумали трусы

Скажите, а у вас никогда не было такого, что кто-то удалил из справочника строку, и теперь непонятно к чему относится запись в основной таблице?
И коды никогда не дублировались по недосмотру?
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34585788
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод softwarer Выходит что-то типа "все минусы в одном флаконе".
Я бы сказал - и плюсы и минусы. В этом и сложность выбора, а иначе и проблем бы не было. Вы конечно скажите что проблемы и нет, но откуда тогда постоянно возникающие вопросы (на этом же форуме).Я могу сказать откуда - от ЛЕНИ.
От лени создавать и поддерживать новые объекты в БД.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34585795
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
модЯ бы сказал - и плюсы и минусы. В этом и сложность выбора, а иначе и проблем бы не было.
Я к сожалению настолько не знаю формсов, что практически не в состоянии обсудить варианты решения этой ситуации с их помощью. Хотя это наверняка возможно - скажем, реализацией динамики в БД.

С точки зрения плюсов и минусов..... действительно, получается какой-то тришкин кафтан. Если, как я правильно понимаю Ваше высказывание, Вы выбрали инструмент "под БД", то отход от использования средств БД противоречит поставленной цели - получается так, что "пошли вроде направо, а двигаемся почему-то влево". Это относится не только к ограничениям целостности в данном случае, но и к другим периодически мелькающим в форуме Oracle вопросам поддержки формсами тех или иных фич БД.

мод Вы конечно скажите что проблемы и нет, но откуда тогда постоянно возникающие вопросы (на этом же форуме).
Какие именно?

Как Вы несомненно знаете, есть набор тем, которые будучи не слишком обоснованными, тем не менее периодически всплывают. Скажем, только вчера в форуме Oracle в очередной раз всплыла тема "гарантированный порядок записей в выборке без применения order by", которая многократно обсуждалась в половине форумов sql.ru, каждый раз завершалась объяснением "используйте order by", люди в общем понимали и не возражали, и тем не менее, через несколько недель поднимался очередной топик....
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34585798
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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$)

Вопрос с сылочной целостностью это более серьезный вопрос, действительно если она необходима, то подойдет только решение "один справочник - одна таблица". Поддержка целостности с помощью процедур и триггеров для решения "все в одном" на порядок более затратная.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34585834
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EstetsНо, это потребовало около 2-х человеко/лет на разработку и заказчик это оплатил (24*1500$=36000$).
Если при этом речь идет о разных таблицах из двух одинаковых полей, это очень похоже на самую наглую махинацию в истории земного бизнеса ;)

EstetsЕсли есть такая возможность пожалуйста, если нет то не стоит говорить о том что динамическая структура "1х1" по затратам соответствует решению "все в одной таблице" (2 человеко/дня на разработку и отладку = 150$)
Да, не соответствует. Я бы сказал, "час на разработку и отладку" = $16. В этот час входят:

- метод создания таблиц справочников с трудоемкостью, равной вводу с клавиатуры имени таблицы
- интерфейс редактирования любой созданной таблицы
- интерфейс выбора из любой созданной таблицы

Интерфейсы подразумеваются на уровне базовых возможностей компонент (скажем, если используете DevExpress, поиск по первым символам получите автоматически, если используете стандартные, потребуется дополнительно пять-десять минут).

EstetsВопрос с сылочной целостностью это более серьезный вопрос, действительно если она необходима , то
:)

Estetsподойдет только решение "один справочник - одна таблица".
В принципе ссылочную целостность можно использовать и для варианта "все в одном".
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34585931
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer EstetsНо, это потребовало около 2-х человеко/лет на разработку и заказчик это оплатил (24*1500$=36000$).
Если при этом речь идет о разных таблицах из двух одинаковых полей, это очень похоже на самую наглую махинацию в истории земного бизнеса ;)

Речь шла об инструменте (ядре) приложения которое как раз и позволяет в десяток кликов создать новый справочник/документ по аналогии с существующим, но лежащий на другой таблице включая интерфейсные процедуры и не требующий вмешательства в клиентскую часть, для начала работы пользователей с новым документом.
softwarer
EstetsЕсли есть такая возможность пожалуйста, если нет то не стоит говорить о том что динамическая структура "1х1" по затратам соответствует решению "все в одной таблице" (2 человеко/дня на разработку и отладку = 150$)
Да, не соответствует. Я бы сказал, "час на разработку и отладку" = $16. В этот час входят:

- метод создания таблиц справочников с трудоемкостью, равной вводу с клавиатуры имени таблицы
- интерфейс редактирования любой созданной таблицы
- интерфейс выбора из любой созданной таблицы

Интерфейсы подразумеваются на уровне базовых возможностей компонент (скажем, если используете DevExpress, поиск по первым символам получите автоматически, если используете стандартные, потребуется дополнительно пять-десять минут).

Эх где бы таких программистов и побольше Правда отошел я от программирования, но времена были указаны реальные, сколько выполнял ту или иную работу человек на такой ставке.

softwarer
EstetsВопрос с сылочной целостностью это более серьезный вопрос, действительно если она необходима , то
:)

Estetsподойдет только решение "один справочник - одна таблица".
В принципе ссылочную целостность можно использовать и для варианта "все в одном".
Можно, но как я сказал выше, сложнее. Либо хранить в документах два поля ID-тип справочника, что сводит на нет удобство использования но позволяет использовать ссылочную целостность (в нашем случае простые справочники имеют двойной ключ тип-id). Либо использовать триггерные проверки зашивая туда тип справочника, что долго и муторно. Либо не использовать ссылочную целостьность вообще
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34585975
Серж
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Была давно такая идея... придумать модель универсального справочника, сделать для него универсальную форму ввода/выбора/поиска...

Вошли в штопор на первом же этапе -- дать определение понятию СПРАВОЧНИК. Придумали много, но почти все реальные сущности, которые мы НАЗЫВАЛИ справочниками под придуманные определения не подходили.

Далее... почти все что называлось у нас справочником имело свои особенности и в целом общего имело столько же, сколько общего между яблоком и устрицей... их обоих можно есть и обоими можно отравиться... На этом сходство заканчивается.

Возникает ощущение, что некоторые не избавились от хм... страстного желания унификации. Т.е. если две совершенно разные сущности имеют атрибут ИМЯ, то нужно обязательно им выделить общего предка и вынести туда этот атрибут (т.е. положить все на одну таблицу). Как правило, при таком подходе приложение начинает разрываться внутренними связями и рушится.

Если две сущности имеют одинаково произносимые атрибуты , это еще не означает их родственность. И как правило есть совершенно разные сущности (классы, таблицы) с одинаково звучащими именами атрибутов/методов.

Мне лень искать примеры... но возьмем класс 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 справочников только из двух полей.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34586008
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СержP.S. Все таки интересно посмотреть на перечень 190 справочников только из двух полей.Вот список наших категорий.
Каждая категория - это отдельный справочник.
Большинство из них - это варианты ответа в анкетах для операторов Call-центра под разные проекты.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34586053
Серж
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 справочников? И что он содержат?
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34586094
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 справочников - содержание анкеты по ассортименту спортивных магазинов.

содержат перечень ассортимента и характеристик.
Возможен множественный выбор признаков.
часть из этих категорий - выложено в файле.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34586126
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EstetsРечь шла об инструменте (ядре) приложения которое как раз и позволяет в десяток кликов создать новый справочник/документ по аналогии с существующим, но лежащий на другой таблице включая интерфейсные процедуры и не требующий вмешательства в клиентскую часть, для начала работы пользователей с новым документом.
Хм. Если бы речь шла только о справочниках, я бы назвал цифру "совершенно нереальной". В том, что касается документов, есть совершенно непредсказуемый пункт "интеграция с учетной машиной", определение действий, которые должны происходить при той или иной операции с документом.

EstetsЭх где бы таких программистов и побольше Правда отошел я от программирования, но времена были указаны реальные, сколько выполнял ту или иную работу человек на такой ставке.
Я верю, что они их столько выполняли :) Я назвал то время, за которое я могу "сесть и сделать" означенное.

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

EstetsМожно, но как я сказал выше, сложнее. Либо хранить в документах два поля ID-тип справочника, что сводит на нет удобство использования но позволяет использовать ссылочную целостность
Хм. Не очень понял, чем это сводит на нет удобство использования (если, конечно, Вы не имеете в виду идиотизм независимой нумерации id внутри типа). Все то же самое.

Основной минус ключа по двум полям - мусор. Как мусор в данных, лишнее место в таблице итп, так и мусор в метаданных (поля, которые не фигурируют нигде ни в интерфейсе, ни в процедурах).

Наилучший имхо способ сочетать "одну таблицу" со ссылочной целостностью - использовать generalized key. Например, выделить каждому справочнику по диапазону из миллиона значений id. Понятие "категории" при этом в явном виде уходит, а ограничения целостности становятся комбинацией наподобие

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
alter table data 
  add constraint data_somedic_fk 
  foreign key (somedic_id)
  references general_dictionary (id);

alter table data
  add constraint check_data_somedic_category
  check (somedic_id between  38000000  and  38999999 );

Тоже, конечно, уродство, но работать будет получше других вариантов.

EstetsЛибо не использовать ссылочную целостьность вообще
Угу. Пример моей любимой концепции, называется "эскалация кривизны".

Я бы отметил исключительную уместность подхода. Я готов понять ситуацию, когда, после того как вендор тщательно протестировал приложение, админ, пытаясь выжать из системы несколько процентов производительности, отключает некоторые ключи. Но в ситуации "мы даем пользователю инструмент доработки системы и при этом отключаем тривиальные проверки целостности".... Это здорово похоже на поиск подружки на ночь в ближайших окрестностях КВД.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34586395
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelyЯ могу сказать откуда - от ЛЕНИ.
Ну, это слишком простое объяснение, причины есть позерьезнее.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34586414
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод BelyЯ могу сказать откуда - от ЛЕНИ.
Ну, это слишком простое объяснение, причины есть позерьезнее.Тогда Вы их назовите...

Трудозатраты на создание вспомогательных объектов?
Это автоматизируется...
Трудозатраты на печатание запросов?
Это вообще смешно - скорость работы программиста слабо связана с такой разницей в размерах запроса.
Издержки производительности базы?
Их тоже нет...

что-то еще назовете?
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34586445
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Серж
P.S. Все таки интересно посмотреть на перечень 190 справочников только из двух полей.
Например документооборот, у каждого документа есть признаки:

1-Внешний
2-внутренний

1-Входящий
2-Исходящий

1-Бумажный
2-Электронный

1-Передан по почте
2-Курьером
3-По сети

итд. итп. часть полей чисто справочная, от установки других зависит процесс обработки документов.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34586542
Бред
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer BelyУ нас для таких супер простых вариантов есть таблица SIMPLE_LIST, где есть поле NAME, ID, CATEG_NAME
Когда-то, году в 94-м, я работал примерно так же, на клиппере. Потом, когда пришел на Oracle, задал вопрос - а почему бы не сложить простые справочники таким манером. В ответ на что получил просьбу назвать хотя бы одно осмысленное преимущество такой вот "кучи малы" (под неосмысленными я понимаю, например, экономию нескольких килобайт дискового пространства). Попробовал - и не смог. Так до сих пор и не могу, одни минусы.

Может термин "справочник" запутывает? Корова - это элемент справочника. Но ведь это же и факт существования такого животного. То есть, концептуально, такой же факт, как и факт покупки коровы, например.
Делать одну таблицу "Товар" или сотни и тысячи таблиц "Товары такие-то"? А ссылки на товары в операциях, например в таблице покупок, хорошо будут выглядеть, если товары во многих таблицах?
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34586559
Бред
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СержБыла давно такая идея... придумать модель универсального справочника, сделать для него универсальную форму ввода/выбора/поиска...

Вошли в штопор на первом же этапе -- дать определение понятию СПРАВОЧНИК. Придумали много, но почти все реальные сущности, которые мы НАЗЫВАЛИ справочниками под придуманные определения не подходили.

Далее... почти все что называлось у нас справочником имело свои особенности и в целом общего имело столько же, сколько общего между яблоком и устрицей... их обоих можно есть и обоими можно отравиться... На этом сходство заканчивается.

Возникает ощущение, что некоторые не избавились от хм... страстного желания унификации. Т.е. если две совершенно разные сущности имеют атрибут ИМЯ, то нужно обязательно им выделить общего предка и вынести туда этот атрибут (т.е. положить все на одну таблицу). Как правило, при таком подходе приложение начинает разрываться внутренними связями и рушится.

Если две сущности имеют одинаково произносимые атрибуты , это еще не означает их родственность. И как правило есть совершенно разные сущности (классы, таблицы) с одинаково звучащими именами атрибутов/методов.

Мне лень искать примеры... но возьмем класс 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 справочников только из двух полей.

Зря Вы это. Использование унификации, аналогий, симметрии и других концепций крайне полезно при проектировании. И при чем здесь основы программирования? Вы стараетесь программировать (больше программировать) или, наоборот, не программировать (меньше программировать)?
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34586598
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БредМожет термин "справочник" запутывает?
Да нет, не думаю.

БредНо ведь это же и факт существования такого животного. То есть, концептуально, такой же факт, как и факт покупки коровы, например.
Угу. Факт существования коровы - если концептуально - такой же факт, как факт покупки коровы. А факт покупки коровы - концептуально - такой же факт, как факт приема сотрудника на работу. А факт приема сотрудника на работу - концептуально - такой же факт, как факт добавления отдела в штатное расписание. Итого, получаем, что - концептуально - при создании отдела должны возникать оргпроводки и формироваться план надоев.

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

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

Действительно, ключевой вопрос - критерии похожести. И с моей точки зрения, есть правильный и удобный критерий, четкий и формальный: сравнение количества мест, в которых бизнес-функции требуют работы "со всеми такими объектами разом" и количества мест, где требуется "объекты только вот этой категории".

В случае справочников этот расклад более чем четок и однозначен. Места, где требуются значения из справочников вместе, можно пересчитать по пальцам. Сходу я вижу только две функции: экспорт данных и настройка прав. Ну а мест, где требуются справочники поотдельности.... если в системе сто простых справочников, значит, есть как минимум сотня "персональных" ссылок из других таблиц, плюс интерфейс редактирования тех таблиц, в которых используются эти справочники, запросы и отчеты....

Разумеется, можно сказать, что учет "по количеству упоминаний" не совсем верен, и правильнее ввести какую-то весовую функцию, которая учтет "здесь сложно, здесь просто", но с моей точки зрения, кардинальной разницы это уточнение не внесет; в конце концов даже "один удесятеренный вес" против ста не канает. Хотя, допускаю, что в некоторых инструментах.... [традиционный disclaimer]

В случае тех же товаров, о которых Вы упоминали, ситуация другая. Ссылок "на отдельный товар" почти не бывает, ссылки "на все товары" - почти в любой операции. Вот и дизайн оптимален другой.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34586624
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
В случае тех же товаров, о которых Вы упоминали, ситуация другая. Ссылок "на отдельный товар" почти не бывает, ссылки "на все товары" - почти в любой операции. Вот и дизайн оптимален другой.
В данном случае согласен, гы-гы-гы только вы еще физиков-юриков вспомните
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34586636
Бред
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем понял про другую ситуацию, честно говоря (ведь в конкретной операции ссылка на конкретный товар). Вроде как тысяч таблиц товаров мы делать не будем, хотя они (товары) совершенно разные и не похожие...
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34586640
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EstetsВ данном случае согласен, гы-гы-гы только вы еще физиков-юриков вспомните
Вспомню, лехххко. В полнофункциональной системе как правило куча функционала, относящегося к ним поотдельности, и куча же функционала, относящегося к ним вместе. Поэтому последние лет пять я однозначный сторонник дизайна из таблиц "Физики", "Юрики" и "Контрагенты". Таким образом, например, "Сотрудник" у нас - однозначно "физик", "Банк" - однозначно "юрик", а "Покупатель" может быть и тем, и другим.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34586644
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бред хотя они (товары) совершенно разные и не похожие...
Для кого? Для типичных ИС товары похожи как две капли воды и различаются максимум признаками на уровне категорий (то наливаем в цистерны, это складываем штабелями). При этом, что характерно, с точки зрения ИС цистерна почти не отличается от штабеля - во многих случаях это две строки одного справочника и не более того.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34586659
Бред
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что касается именно "справочников" (теперь понятно, что "товары" - это не справочник!) и "похожее - вместе, различное - отдельно", то я храню, конечно, даже "абсолютно похожие справочники" в разных таблицах. Иначе говоря, разные сущности я храню в разных таблицах.
Справочник видов оплат и справочник видов транспорта я не объединю даже, если в них никогда не добавится никаких атрибутов, кроме ID и Name.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34586692
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Серж
В большинстве же случаев так называемые справочники не имеют между собой большого кол-во внутренних связей и, что самое главное, не требует хм... как бы точнее.... перекрестной обработки, в общем не нужно "ходить" сразу по всем справочникам.

С этим я согласен. Объединение было сделано не по логическому признаку, а из унификации.

Серж
Остается вопрос и будущего. Даже если сейчас есть 100 справочников структуры (ИД, Имя), то где гарантия, что завтра у сотого не появятся особенности? И тут лучше сегодня иметь 100 таблиц, 4 хр. процедуры на insert/update/delete/select и 3 окошка для отображения/выбора/изменения.
Завтра, когда изменится табличка за номером 100, я добавлю ( в самом тяжелом случае ) еще 4 хп, 3 окошка, и не нужно будет ломать голову как втиснуть новые требования в старую структуру .

В случае одной таблицы, как было описано выше происходит совершенно аналогичная работа. Создается вторая таблица с "особенностями", 4 процедуры, перекидываются данные по данному типу из первой таблицы во вторую, перепривязываются ссылки на новую таблицу в запросах и интерфейсе. Либо как было сказано выше создается для данного типа расширяющая таблица.

Серж
Еще мерещится вопрос разработки... Если у меня 190 таблиц в ЕрВине, они все разные...
И когда от одной из них тянется связь, я точно знаю, от какой.
Когда я представлю 190 однотипных таблиц в ЕрВине... ужас охватывает меня ;)))
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34586702
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EstetsКогда я представлю 190 однотипных таблиц в ЕрВине... ужас охватывает меня ;)))
Попробуйте как-нибудь при случае нажать в нем кнопку "создать вторую диаграмму"
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34586720
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer EstetsКогда я представлю 190 однотипных таблиц в ЕрВине... ужас охватывает меня ;)))
Попробуйте как-нибудь при случае нажать в нем кнопку "создать вторую диаграмму"
Ну нету, нету у нас модели данных, вся (мета)информация о БД хранится в БД. Можете смеяться но прообразом всего этого служила 1С и Axapta, только с переводом бизнес логики на уровень ХП.
Со своими плюсами как отсутствие компиляции клиентской части как таковой, и со своими минусами как отсутствие триггерной и ссылочной целостности.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34586740
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EstetsНу нету, нету у нас модели данных
Ну так не пытайтесь представить то, чего у Вас нет :)

Estetsвся (мета)информация о БД хранится в БД. Можете смеяться но прообразом всего этого служила 1С и Axapta, только с переводом бизнес логики на уровень ХП.
Я нисколько не собираюсь смеяться, мне скорее грустно от мысли, какой великолепный самолет можно было бы построить, если бы с толком применить все усилия, затраченные на сотни бумажных голубков...
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34586751
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer EstetsНу нету, нету у нас модели данных
Ну так не пытайтесь представить то, чего у Вас нет :)

Estetsвся (мета)информация о БД хранится в БД. Можете смеяться но прообразом всего этого служила 1С и Axapta, только с переводом бизнес логики на уровень ХП.
Я нисколько не собираюсь смеяться, мне скорее грустно от мысли, какой великолепный самолет можно было бы построить, если бы с толком применить все усилия, затраченные на сотни бумажных голубков...
К сожалению деньги платят за реальных голубков, а не за гипотетический самолет
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34586853
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Estets Можете смеяться но прообразом всего этого служила 1С и Axapta, только с переводом бизнес логики на уровень ХП. И что, интересно, явилось причиной выбора именно такого дизайна? Ведь одинаковую функциональность можно решить овершенно разными способами, и это даже не ИМХО, это факт... Я не иронизирую, просто хочу соломку подстелить, чтоб самому в такое не вляпаться
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34586863
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EstetsК сожалению деньги платят за реальных голубков, а не за гипотетический самолет
К сожалению, довольно часто платят как за самолет, а в итоге вынуждены довольствоваться голубком
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34592811
Серж
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelyЭто 9 справочников - содержание анкеты по ассортименту спортивных магазинов.

Мне кажется, что это как раз тот случай, когда все это по сути один справочник сложной структуры.

EstetsНапример документооборот, у каждого документа есть признаки:
А
1-Внешний
2-внутренний
Б
1-Входящий
2-Исходящий
В
1-Бумажный
2-Электронный
Г
1-Передан по почте
2-Курьером
3-По сети


В данном случае я вижу одну таблицу "Документ" с несколькими атрибутами. Возможные значения атрибутов А,Б,В определяются на этапе разработки и в дальнейшем не меняются.
Аттр. Г в принципе может расширяться, но список возможных способов доставки конечен и может легко расширяться разработчиком.

Бред
Зря Вы это. Использование унификации....
Правильно, унификация -- великая вещь! Но я уже привел привел со свойство SelecttedItem. Если оно есть у многих, то это не повод притягивать их за уши друг к другу.

Estets
Создается вторая таблица с "особенностями", 4 процедуры, перекидываются данные по данному типу из первой таблицы во вторую, перепривязываются ссылки на новую таблицу в запросах и интерфейсе....

Когда я представлю 190 однотипных таблиц в ЕрВине... ужас охватывает меня ;)))

Каждый колет дрова под свою печку... Я просто не вижу никаких достоинств в подобном подходе вообще (в каком-то конкретном, возможно да).

А 190 табл. в ЕрВине совсем не пугают -- есть области, на которых можно отображать только значимые для данной точки зрения таблицы.

И самый главный вопрос -- ограничения целостности...
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34592833
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Серж BelyЭто 9 справочников - содержание анкеты по ассортименту спортивных магазинов.Мне кажется, что это как раз тот случай, когда все это по сути один справочник сложной структуры.Объяснение, вырванное из контекста, может объяснить что угодно, кроме реальности.

Среди этих - это один справочник.
А среди 160 категорий, которые я привел в файле - можно выделить около 30 разнотипных справочников, которые логически разные.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34592890
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Серж EstetsНапример документооборот, у каждого документа есть признаки:
А
1-Внешний
2-внутренний
Б
1-Входящий
2-Исходящий
В
1-Бумажный
2-Электронный
Г
1-Передан по почте
2-Курьером
3-По сети
В данном случае я вижу одну таблицу "Документ" с несколькими атрибутами.Вопрос не про конкретные атрибуты, а про то где хранить значения.

СержВозможные значения атрибутов А,Б,В определяются на этапе разработки и дальнейшем не меняются .Слишком смелое утверждение для неизвестных требований неизвестной истсемы.
Я бы сказал, что здесь как повезет, жизнь заставит - могут и измениться.
Я не вижу проблемы в расширении списка значений, кроме внутренних ограничений системы.

СержАттр. Г в принципе может расширяться, но список возможных способов доставки конечен и может легко расширяться разработчиком.Вопрос стоит не про расширение списка - это делается легко и непринужденно при любом подходе, а про увеличение свойств.
Напимер в свойстве (Г) может быть введена ставка по отправке за лист документа:
"По почте" - 1 руб, "Курьером" - 10 руб, "По сети" - 0.1 руб.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34592929
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СержПравильно, унификация -- великая вещь! Но я уже привел привел со свойство SelecttedItem. Если оно есть у многих, то это не повод притягивать их за уши друг к другу.
Пример, кстати, не очень удачный. Во-первых, неудачный сам по себе, во-вторых, плохо соответствующий обсуждаемому вопросу.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34593098
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понимайю! Я на любом наборе идентичных справочников построю вам код, который не менее автоматически будет обрабатывать что одну таблицу, что 800, разница - в 2 (ДВУХ) разных свойствах одной и той-же формы! Однако, если мой, один из стандартных, справочников, станет вдруг не стандартным, то я, не меняя клиентскую часть вообще, смогу это изменение на этом-же коде реализовать, более того, уже реализовал.
Честно, ребята, я не вижу принципиальной разницы между объявлениями "Customer.ID = ..." и "СustomerType = ... AND Value = ...", т.е. вижу, но я это уже объяснял...
Добавлю, если не внапряг: вы-же дома у себя не кладёте в один ящик носки и гвозди, почему!!! вы позволяете себе такой подход в отношении Базы Данных! Объясните, в чём цимес-то, тупому-то!
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34593100
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну кроме того, что у нас так сделано... и ты вааще молодой и ничего не паниаеш...
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34593656
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychОднако, если мой, один из стандартных, справочников, станет вдруг не стандартным, то я, не меняя клиентскую часть вообще, смогу это изменение на этом-же коде реализовать, более того, уже реализовал. Как говаривал мой однокурсник...
Дайте мне программу и я сформулирую такие требования, что вам ее придется переделывать.
Справочники просто так не расширяются и логика расширения не всегда линейная (добавление полей).
Справочник может начать участвовать в бизнеслогике, которая наложит свои ограничения.

egorychДобавлю, если не внапряг: вы-же дома у себя не кладёте в один ящик носки и гвозди, почему!!! вы позволяете себе такой подход в отношении Базы Данных!А у вас под каждый вид крупы дома отдельный шкаф?
Один шкаф под овсянку, другой под рис, третий под манку, четвертый под перец, пятый под лавровый лист... так?

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

Шкаф упомянут не очень к месту. "Оракловым аналогом шкафа" будет пожалуй что tablespace.

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

Шкаф упомянут не очень к месту. "Оракловым аналогом шкафа" будет пожалуй что tablespace.

BelyНе стоит приводить житейские аналогии там где им не место.
Аналогия как раз удачная.Аналогия - не удачная и вот почему:
1) Если банка - это таблица, то что тогда строка в таблице?
У меня строкой будет - как раз банка в которой лежит отдельно перец, отдельно сахар.
А у вас что?
2) Tablespace - я бы сказал, что tablespace - это скорее КУХНЯ, т.е. помещение, где все находится.
Причем, может находиться неоднородное - как продукты, так и кастрюли, мясорубки, цветы на подокойнике.

3) Если я начну рассуждать по житейски - то я могу много нового внести в проектирование баз данных.
Например, я могу сделать вывод, что старые таблицы надо время от времени удалять и создавать новые - заполняя их тем же данными.
Это будет делаться по аналогии с выходом на пенсию и передачей дел молодому сотруднику.
А еще - надо вместо одной таблицы - держать вторую такую же - про запас.
Если с одной таблицей надо провести профилактику (индекс перестроить), то надо переключиться на другую таблицу и с ней работать.
Это по аналогии с больничным листом или отпуском и заменой одного сотрудника другим.

Продолжать?

Я думаю, что лучше обходиться без аналогий, всетаки.
Все достаточно подкованы в математике и базах, чтобы обойтись без ненужных пружинок и веревочек.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34593798
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych Estets Можете смеяться но прообразом всего этого служила 1С и Axapta, только с переводом бизнес логики на уровень ХП. И что, интересно, явилось причиной выбора именно такого дизайна? Ведь одинаковую функциональность можно решить овершенно разными способами, и это даже не ИМХО, это факт... Я не иронизирую, просто хочу соломку подстелить, чтоб самому в такое не вляпаться
Вообщем если Вы разрабатываете концепцию ПО и не сильно ограничены требованиями заказчика, то и "вляпаться" вам не грозит
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34593871
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Серж
EstetsНапример документооборот, у каждого документа есть признаки:
А
1-Внешний
2-внутренний
Б
1-Входящий
2-Исходящий
В
1-Бумажный
2-Электронный
Г
1-Передан по почте
2-Курьером
3-По сети


В данном случае я вижу одну таблицу "Документ" с несколькими атрибутами. Возможные значения атрибутов А,Б,В определяются на этапе разработки и в дальнейшем не меняются.
Аттр. Г в принципе может расширяться, но список возможных способов доставки конечен и может легко расширяться разработчиком.

В данном случае я против "зашивания" значений атрибутов в клиентский код, именно из за того что заранее неизвестно какие из списков необходимо будет расширить. Пусть реально из 190 справочников правились или расширялись у клиентов штук 10-15, но не стоит забывать что одни и те же вещи у разных контор могут называться по разному, а если количество внедрений больше 10 или больше 50-ти? Это что значит держать штат программистов которые будут только поддерживать версии "простых справочников" для разных клиентов?

Серж
А 190 табл. в ЕрВине совсем не пугают -- есть области, на которых можно отображать только значимые для данной точки зрения таблицы.

Это конечно была шутка, но в каждой шутке есть доля правды, как вы думаете насколько сложно, имея больше сотни таблиц запутаться в том что привязать "t_ПодтипыСделокДляОперацийПрямогоРЕПО" или "t_ПодтипыСделокДляОперацийОбратногоРЕПО" ???
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34593935
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelyУ меня строкой будет - как раз банка в которой лежит отдельно перец, отдельно сахар.
Really? Вот тут Вы теряете связь с оракловой базой. В справочниках у Вас строка - это отдельная перчинка и отдельная сахаринка (которые Вы добавляете и удаляете), а "сахар" и "перец" - категории.

Bely2) Tablespace - я бы сказал, что tablespace - это скорее КУХНЯ, т.е. помещение, где все находится. Причем, может находиться неоднородное - как продукты, так и кастрюли, мясорубки, цветы на подокойнике.
Шкаф - тот же самый контейнер для неоднородных предметов. Что существенно, он не содержит отделимых подконтейнеров (давайте не будем про отделимые топором :) и поэтому является аналогом такого же "минимального контейнера" в базе - tablespace. Кухня - это, скорее, аналог БД, хотя здесь уже аналогии получаются зыбкими; можно по-разному играть словами, но смысла уже не будет.

Bely3) Если я начну рассуждать по житейски - то я могу много нового внести в проектирование баз данных.
Верно. И я согласен, что к аналогиям надо подходить с осторожностью - и не пытаться "действовать просто потому, что по аналогии". Однако, для объяснения той или иной концепции удачные аналогии уместны, а данная представляется мне удачной.

BelyНапример, я могу сделать вывод, что старые таблицы надо время от времени удалять и создавать новые - заполняя их тем же данными. Это будет делаться по аналогии с выходом на пенсию и передачей дел молодому сотруднику.
Странная аналогия. Я бы скорее сказал, что аналогией выхода на пенсию будет "время от времени надо выкидывать старое железо, перенося базы на новое". Скажете, это далеко от реальности?

BelyПродолжать?
Смотря какие цели Вы ставите. Если обосновать "любым инструментом можно воспользоваться плохо, особенно если поставить перед собой такую задачу", то незачем.

BelyЯ думаю, что лучше обходиться без аналогий, всетаки.
Это уже вопрос договоренностей о стиле беседы.

BelyВсе достаточно подкованы в математике и базах, чтобы обойтись без ненужных пружинок и веревочек.
Как Вам сказать..... у людей разные системы мышления и восприятия. Это факт, который стоит учитывать.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34593986
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bely egorychДобавлю, если не внапряг: вы-же дома у себя не кладёте в один ящик носки и гвозди, почему!!! вы позволяете себе такой подход в отношении Базы Данных!А у вас под каждый вид крупы дома отдельный шкаф?
Один шкаф под овсянку, другой под рис, третий под манку, четвертый под перец, пятый под лавровый лист... так?

Не стоит приводить житейские аналогии там где им не место.
Согласен, не совсем удачная аналогия, но если развит эту мысль то сдесь идет спор о том, что удобнее, хранить продукты каждый вид в своем контейнере (физически разделять хранилище), или на разных полочках (организовывать логическое разделение внутри одного физического хранилища - шкафа).
Еще раз повторю, ИМХО, оба подхода имеют право на существование, но не вижу однозначных плюсов или минусов, что бы выбрать один из подходов как "единственно верный".
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34594102
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer BelyНапример, я могу сделать вывод, что старые таблицы надо время от времени удалять и создавать новые - заполняя их тем же данными. Это будет делаться по аналогии с выходом на пенсию и передачей дел молодому сотруднику.Странная аналогия. Я бы скорее сказал, что аналогией выхода на пенсию будет "время от времени надо выкидывать старое железо, перенося базы на новое". Скажете, это далеко от реальности?Для меня хранение житейских предметах в ящиках - странная аналогия.
В жизни - никто не будет хранить грязные носки вместе с хлебом, потому что носки пахнут.
А в БД разнотипное (существенно) может храниться в базе в одной таблице (например EAV значения).
Биты - они не пахнут...

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

BelyВопрос не про конкретные атрибуты, а про то где хранить значения.
Как поля таблицы, типа unsigned int.

BelyСлишком смелое утверждение для неизвестных требований неизвестной истсемы.
Дак приводите целиком требования...

BelyВопрос стоит не про расширение списка - это делается легко и непринужденно при любом подходе, а про увеличение свойств.
А что "одна таблица на все" спасет от изменения требований?

softwarerПример, кстати, не очень удачный. Во-первых, неудачный сам по себе, во-вторых, плохо соответствующий обсуждаемому вопросу.
Возможно... Я ж не в школе, теорему доказывать...

авторИ самый главный вопрос -- ограничения целостности...
А с этим то что делать... Или это кажется несущественным.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34594490
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СержВозможно... Я ж не в школе, теорему доказывать...Не которые ответы меня вводят в недоумение - может, всетаки, вспомнить как в школе было?
Напрячся чутка... подумать...

СержЗначит будет 30 справочников.
Как поля таблицы, типа unsigned int.
Дак приводите целиком требования...
А с этим то что делать... Или это кажется несущественным.
Это вы вобще про что?
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34594558
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Серж
авторИ самый главный вопрос -- ограничения целостности...
А с этим то что делать... Или это кажется несущественным.
Проверка целостности может быть реализована (двигаясь от клиента к БД):
1) На клиенте
2) На сервере приложений
3) На интерфейсных ХП
4) На триггерах
5) На констрейтах

Вопрос какие проверки можно/нельзя проводить в случае того или иного решения? Как было сказано в ходе дискуссии выше только в 5-ом пункте накладываются некоторые ограничения в схеме "Все в одном" например нельзя для разных типов справочников ставить различную реакцию Restrict/Set Null/Set Default. Насколько это существенно решать Вам.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34594580
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelyВ жизни - никто не будет хранить грязные носки вместе с хлебом, потому что носки пахнут.
Вполне верная аналогия, которую стоит развить дальше. Хлеб можно заворачивать в целлофан, и запах носок станет неважен. Гвозди из тех же носок не так сложно вытряхивать перед одеванием. Итого - хранить их вместе можно, как можно хранить разнотипные записи в одной таблице. Но то и другое - дополнительный геморрой (заворачивать в целлофан, вешать "эксклюзивные" триггеры...)

BelyЯ хочу сказать, что аналогии можно употреблять только чтобы сделать обяснение более доступным, а в качестве доказательства почему "так надо делать" - это неприемлемо.
Безусловно.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34594620
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer BelyЯ хочу сказать, что аналогии можно употреблять только чтобы сделать обяснение более доступным, а в качестве доказательства почему "так надо делать" - это неприемлемо.Безусловно.Вот поэтому реплику
egorsДобавлю, если не внапряг: вы-же дома у себя не кладёте в один ящик носки и гвозди, почему!!! вы позволяете себе такой подход в отношении Базы Данных!я рассматриваю как неверное использование аналогий, о чем и сказал.

Мама мне в детстве говорила... или Сержант в армии учил... - это не доводы при проектировании ИС.
Это лишь внутренние тараканы конкретного индивидуума, такие же как лично мне приятно видеть более компактные модели данных без лишнего нагромождения.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34594650
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelyВот поэтому реплику ..... я рассматриваю как неверное использование аналогий, о чем и сказал.
Я бы согласился, если бы это был стержневой аргумент, но я рассматриваю эту фразу скорее как попутное замечание - типа "вот так, и вот так, и вот так, и вообще даже вот такая кухонная аналогия..."
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34594867
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bely... такие же как лично мне приятно видеть более компактные модели данных без лишнего нагромождения. Вы знаете, а так сразу стала понятна Ваша позиция. И научную базу сразу перестало быть нужным подводить.
По поводу вот этого-же: Я почему!!! вы позволяете себе такой подход в отношении Базы Данных! думаю, действительно, мне стоит извиниться. Извиняюсь за излишнюю эмоциональность высказывания, тараканы вырвались наружу :-)
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34595141
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych Bely... такие же как лично мне приятно видеть более компактные модели данных без лишнего нагромождения. Вы знаете, а так сразу стала понятна Ваша позиция. И научную базу сразу перестало быть нужным подводить.Дело в том, что я считаю эти два подхода - примерно равноценными.
А в таком случае из двух вещей выбирается одна - уже на основе личных предпочтений.
Главное действовать именно так, а не наоборот
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34595810
KGP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychНа самом деле, может, наоборот, сильно облегчить жизнь при написании интерфейса к этим справочникам, т.к. позволит нарисовать одну универсальную форму для всех справочников

Нет разницы - универсальная форма может параметр 'форматировать' в имя таблицы-справочника.

ps:
4 года назад принимал решение разбивать на ~15 таблиц-справочников {id, name} вместо одной {id, type, name}
и обработку параметра type преобразовывать в обработку имени_таблицы - производительность улучшилась в разы (справочники разрослись)
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34609363
Аноним564
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть однотипные но слегка разнящиеся сущности.

А почему не рассмотреть схему - общее в общей таблице, отличное в отдельных связанных по 1:1?

Плюсы в одной таблице ( либо предлагаемое выше)
Delete from ALL_Справочники WHERE год-такой-то
Update owner=Vasya where owner=Petya //Петя уволился итд
А уж селект...

Есть однотипные но слегка разнящиеся сущности. Ну и надо выбрать все те что удовлетворяют определенным критерриям -- например все документы Иванова И И что он сделал в 2005 году.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34609991
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аноним564Плюсы в одной таблице ( либо предлагаемое выше)
Delete from ALL_Справочники WHERE год-такой-то
Update owner=Vasya where owner=Petya //Петя уволился итд
А уж селект...1. Если строки справочника принадлежат кому-то, то это уже не справочник, а записная книжка.
Справочник - принадлежит ВСЕМ.
2. Если надо разделять доступ к справочнику, то можно ввести понятие ГРУППА.
у которой есть права доступа к определенным строкам.
Если человек уволился - его исключили из группы, а другого назначили.
3. Операция переназначения владельца (ведущего менеджера) для организаций (в CRM), для проекта, для документов - вполне достойна быть выделена в ОТДЕЛЬНУЮ операцию, которую можно реализовать с помощью процедуры или еще как-нибудь.
На такую операцию - по хорошему надо назначать отдельные права.
4. Если в справочнике есть владелец, права доступа - то это ОДНОЗНАЧНО в отдельную таблицу.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #34610102
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аноним564Есть однотипные но слегка разнящиеся сущности. - речь ранее шла, в общем-то о справочниках простейшего вида, полноценными сущностями не являющимися (по крайней мере пока)
Аноним564А почему не рассмотреть схему - общее в общей таблице, отличное в отдельных связанных по 1:1? - потому что реализация такой связи потребует написания большого количества кода, поддерживающего ссылочную целостность и непротиворечивость данных, нетривиального и сложного в сопровождении, несопоставимого с поддержкой нескольких, изначально разделённых таблиц с обычными констраинтами и внешними ключами.
Повторное использование кода, это конечно, хорошо, но заходить в этом направлении дальше необходимого всё-же не стоит.
По мере развития программы от версии к версии "однотипные, но слегка разнящиеся" сущности постепенно превращаются в "слегка похожие", а потом и в "совершенно разные", общее у которых получается ID и Name. Позаботиться о будущем никогда не вредно, ещё при написании версии 1.0
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Однотипные таблицы
    #35550191
Николай1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Estets Серж
P.S. Все таки интересно посмотреть на перечень 190 справочников только из двух полей.
Например документооборот, у каждого документа есть признаки:

1-Внешний
2-внутренний

1-Входящий
2-Исходящий

1-Бумажный
2-Электронный

1-Передан по почте
2-Курьером
3-По сети

итд. итп. часть полей чисто справочная, от установки других зависит процесс обработки документов.

Это, скорее, домены, чем справоники. И лежать должны в доменах.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #35906314
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 справочников или все в одной таблице ... не пойму!!!
проблема в постановке и анализе задачи!
...
Рейтинг: 0 / 0
Однотипные таблицы
    #35906388
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spРассматривая ваши 190 справочников не увидел здесь одной таблицы в упор - тут 2 таблицы:
-категории (SPORT_COMMON, SPORT_FIRM_TYPE...)
-список значений для категории(Ракетки, мячи, сетки и др. для большого тенниса, Продажа товаров для спорта и отдыха...)

зачем 190 справочников или все в одной таблице ... не пойму!!!
проблема в постановке и анализе задачи!Еще раз.

Есть 9 типов анкет:
Авто, Одежда Обувь, Медицина, Спорт, Парикмахерские итд.

Анкетирование проходит торговых точек.

В каждой торговой точке заполняется одна (или несколько) анкет.
В каждой анкете - есть вопросы, которые специфичны для этого типа.
Например:
Авто: кол-во машиномест в сервисе (число)
Запчастями к каким машинам продают (список из 30 фирм: ВАЗ, ГАЗ, Мерседес, Опель итд.)
Какие запчасти продают (список из 20 видов: стекла, магнитолы, глушители, шины итд.)
итп.

Общепит:
Тип кухни (Грузинская, Японская, Русская, Европейская, Без специализации итд.)
Тип обслуживания (с официантами, бармены, самообслуживание)
Есть живая музыка (Да/Нет)
Есть винная карта (Да/Нет)
итп.

Очевидно, что для хранения вариантов ответов нужно использовать справочники.
Если под каждый вопрос создавать отдельный справочник (Запчасти к каким машинам продают, Тип кухни, Какие запчасти продают, Тип обслуживания итд.), то потребуется создать 190 справочников.
Альтернатива - создать одну таблицу для всех вопросов и специальное поле, которое указывает к какому вопросу относится вариант ответа.

вторая таблица, про которую Вы говорите - это таблица связи анкеты с вариантами ответов.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #35906405
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spРассматривая ваши 190 справочников не увидел здесь одной таблицы в упор - тут 2 таблицы:
-категории (SPORT_COMMON, SPORT_FIRM_TYPE...)
-список значений для категории(Ракетки, мячи, сетки и др. для большого тенниса, Продажа товаров для спорта и отдыха...)

зачем 190 справочников или все в одной таблице ... не пойму!!!
проблема в постановке и анализе задачи!Точнее так.
Можно один этот справочник разбить на две таблицы (у нас так и есть).
Но кардинально это ничего не меняет.
главное, что варианты ответов все лежат в одной таблице.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #35906700
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelyspРассматривая ваши 190 справочников не увидел здесь одной таблицы в упор - тут 2 таблицы:
-категории (SPORT_COMMON, SPORT_FIRM_TYPE...)
-список значений для категории(Ракетки, мячи, сетки и др. для большого тенниса, Продажа товаров для спорта и отдыха...)

зачем 190 справочников или все в одной таблице ... не пойму!!!
проблема в постановке и анализе задачи!Точнее так.
Можно один этот справочник разбить на две таблицы (у нас так и есть).
Но кардинально это ничего не меняет.
главное, что варианты ответов все лежат в одной таблице.

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

PS: понятно, что из двух зол приходится выбирать меньшее...
...
Рейтинг: 0 / 0
Однотипные таблицы
    #35907863
Николай1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerBelyУ нас для таких супер простых вариантов есть таблица SIMPLE_LIST, где есть поле NAME, ID, CATEG_NAME
Когда-то, году в 94-м, я работал примерно так же, на клиппере. Потом, когда пришел на Oracle, задал вопрос - а почему бы не сложить простые справочники таким манером. В ответ на что получил просьбу назвать хотя бы одно осмысленное преимущество такой вот "кучи малы" (под неосмысленными я понимаю, например, экономию нескольких килобайт дискового пространства). Попробовал - и не смог. Так до сих пор и не могу, одни минусы.

Выгода, собственно, одна - не требуется изменять структуру базы под каждый чих.
Так проще как клиентам, так и разработчику (как фирме, а не человеку), особенно если проходится поддерживать десяток-другой разных версий одного и того же продукта. Не надо морочиться со структурой базы при переносе кода из одной версии в другую, ибо и с кодом заморочек хватает. А добавлять подобные справочники приходится достаточно часто (порою в рамках фиксов/патчей), что бы для каждой такой мелочи дожидаться, скажем, релиза, в котором меняется структура базы. И, кстати, да. Самый распостраненный вариант использования таких справочников - EAV. А что делать? Говорит заказчик - хотим этот атрибут через неделю (в лучшем случае)! И что делать? Тащить изменение структуры через все пространства (разработка - тестовое - выпуск) за одну неделю? Не, я видал, конечно, таких героев, но вообще - в топку.
EAV имеет вои недостаки (точнее сказать - у него одни только недостатки), но все перекрывается одним достоинтством - скоростью добавления атрибутов.

Впрочем, мы уже спорили по этому поводу, но без особого успеха....
...
Рейтинг: 0 / 0
Однотипные таблицы
    #35909551
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай1Выгода, собственно, одна - не требуется изменять структуру базы под каждый чих.
Добавление справочника имеет смысл только тогда, когда на него кто-то будет ссылаться, а это в нормальном варианте - уже "изменение структуры базы". Итого, чтобы этот аргумент имел смысл, БД ещё и не должна использовать человеческих внешних ключей, подменяя их тем или иным "суперуниверсальным механизмом ссылок чего угодно на что угодно". А в этом случае становится довольно странно видеть "обычные таблицы", особенно если учитывать, что о скорости работы и удобстве написания бизнес-логики речи уже не идёт, а вот для добавления в них атрибутов "требуется изменять структуру базы под каждый чих".

Итого получаем, что аргумент имеет смысл только в рамках "общего универсального движка" или на прямом пути к нему. Плюсы и минусы такого подхода... изучены.

Религиозный подход фиксов-патчей-релизов я не совсем понял.
...
Рейтинг: 0 / 0
Однотипные таблицы
    #35910528
Николай1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerНиколай1Выгода, собственно, одна - не требуется изменять структуру базы под каждый чих.
Добавление справочника имеет смысл только тогда, когда на него кто-то будет ссылаться, а это в нормальном варианте - уже "изменение структуры базы". Итого, чтобы этот аргумент имел смысл, БД ещё и не должна использовать человеческих внешних ключей, подменяя их тем или иным "суперуниверсальным механизмом ссылок чего угодно на что угодно". А в этом случае становится довольно странно видеть "обычные таблицы", особенно если учитывать, что о скорости работы и удобстве написания бизнес-логики речи уже не идёт, а вот для добавления в них атрибутов "требуется изменять структуру базы под каждый чих".

Итого получаем, что аргумент имеет смысл только в рамках "общего универсального движка" или на прямом пути к нему. Плюсы и минусы такого подхода... изучены.

Религиозный подход фиксов-патчей-релизов я не совсем понял.

Гм. Что же в нем непонятного?
Есть большой продукт, который стоит у большого количества клиентов и регулярно (раз в месяц) централизовано обновляется (это, допустим, версия). Если надо сделать что-то срочное, то выпускается фикс. Срок его выпуска - 1 день.
Всего есть (упрощенно) три пространства - разработка, тестирование и выпуск. При нормальной разработке сначала все делается в пространстве разработки, потом результат переностится в пространство тестирования, потом - в выпуск.
При экстренных изменениях все сразу делается в пространстве выпуска, а потом возвращается "обратно" в разарботку и тестирование.
Еще есть десяток клиентов у которых есть свои, более другие, версии. Со своим зоопарком пространств (правда покороче).
Ну и представьте, какой объем работы надо будет проделать, если, вдруг, придется изменять структуру базы. Как минимум - это столько же, сколько делается при изменении кода (хотя что-то мне подсказывает, что больше). Ну и надо учесть, что баз обычно больше, чем пространств и достаточно часто практикуется переключение с одной базы на другую по мере надобности. "А теперь у них у всех - разная структура".

Что касается использования новых справочников, то я об этом уже писал - EAV. И, таки, да, движок. Добавляем классификатор (тот самый, универсальный), дополнительный атрибут и - телемаркет. Пользователь может работать. Если этот реквизит нужен только на экране и при печати, то ничего кодировать не нужно вообще. Если где-то еще, то надо написать это самое "еще".

Не понимаю, кстати, религиозных выпадов типа, "тогда все надо сложить в одну таблицу" или "тогда все в EAV". Зачем? В EAV попадает только то, что a) нужно срочно б) не требует никакой обработки, кроме ввода, отображения и печати. Остальное лежит в "обычных" таблицах.
Кстати, далеко не все данных из таких "справочников" сохраняются в базе. Некоторые могут использоваться исключительно для управления некими процессами. Например - операций экспорта/импорта, для указания соответствия внутренних и внешних кодировок.

Что же касается пресловутой "ссылочной целостности", то проблемы, порожденные ее отсутствием, составляют, хорошо если 5% от общего числа проблем приложения (из моей более чем 15 летней практики сопровождения тиражных продуктов).
...
Рейтинг: 0 / 0
Однотипные таблицы
    #35910743
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Belyspну так из анализа данных и видно что это не 199 справочников - это один справочник с категориями и реализовывать его в 199 таблицах - глупость и вопрос о реализации его в одной или в 199 таблицах неактуаленИ в результате получаем возможность прицепить к анкете АВТО ответ "Тип кухни: Японская", что является бредом.

PS: понятно, что из двух зол приходится выбирать меньшее...

где вы такое увидели из моего поста???
там если есть КАТЕГОРИЯ (тут я мигаю вам глазом) авто , то там и будет вашая "японская", а в категории про кухню (тут я опять мигаю вам глазом) будет все что относится к кухне - это же иерархический справочник КАТЕГОРИЯ-ПОДКАТЕГОРИИ
...
Рейтинг: 0 / 0
Однотипные таблицы
    #35911977
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spBelyspну так из анализа данных и видно что это не 199 справочников - это один справочник с категориями и реализовывать его в 199 таблицах - глупость и вопрос о реализации его в одной или в 199 таблицах неактуаленИ в результате получаем возможность прицепить к анкете АВТО ответ "Тип кухни: Японская", что является бредом.

PS: понятно, что из двух зол приходится выбирать меньшее...

где вы такое увидели из моего поста???
там если есть КАТЕГОРИЯ (тут я мигаю вам глазом) авто , то там и будет вашая "японская", а в категории про кухню (тут я опять мигаю вам глазом) будет все что относится к кухне - это же иерархический справочник КАТЕГОРИЯ-ПОДКАТЕГОРИИДумаем над заполнением анкет...
...
Рейтинг: 0 / 0
Однотипные таблицы
    #36412489
DeepJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока ниасилил все до конца, но суть ясна, одна таблица или много, вот в чем вопрос.
У меня ситуация такая. Имею 9 баз под одну систему. В каждой базе присутствуют, как и полагается, термины. Т.к. мы используем подход общения с клиентом только через хранимые процедуры, то использовать множественные таблицы - слишком накладно. Это куча однотипных хранимок, например. Поэтому я больше склоняюсь к одной таблице в каждой базе с унифицированным интерфейсом. Но вот вопрос: что должен харкодить клиент? Идентификаторы каждой категории? Каждого термина? А если добавится новый термин в категории?

Приведу пример построенного классификатора:
ID_Term int
TermNode hierarchyid
Name nvarchar(50)
Icon varbinary(MAX)

Структура на примере типов файлов:
--Пол
|
--Тип файлов
|
--Видео
| |
| ---avi
| ---mpg
--Аудио
|
---mp3

В клиенте харкодить идентификаторы категорий?
...
Рейтинг: 0 / 0
177 сообщений из 177, показаны все 8 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Однотипные таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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