![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Целесообразность псевдосправочников в БД [D6]
msguns © (2005-11-02 12:24:00)Уважаемые Мастера !
Очень интересно ваше мнение вот по какому поводу:
Часто при проектировании БД приходится сталкиваться с объектами, которые вроде надо бы определить как справочные, но из-за их достаточно большого количества и малого диапазона значений не хочется оформлять отдельными таблицами.
Например:
Есть картотека служебной библиотеки, каждое издание или подшивка которой имеет такие реквизиты, как
- наличие ("В наличии", "В ремонте", "В розыске", "На руках")
- тип издания ("Книга", "Журнал", "Газета", "Карта", "Подшивка")
- место хранения (не более десятка адресов)
- состояние ("новая", "б/у", "ветхая")
...
Есть решение, когда в самой записи картотеки для каждого из подобных реквизитов отводится стринг небольшой длины собственно для хранения нативного текста.
При редактировании картотеки приложение дает запрос к картотеке для извлечения уникальных значений соотв-го поля таблицы и полученные тексты складывает в комбобокс для выбора. Если юзер ввел новое значение в комбобокс, то при следующей выборке оно "автоматом" попадает в подобный "псевдосправочник". Т.е. создается иллюзия справочника, в то время как реально он не существует. При этом отпадает необходимость контроля целостности, ввода в БД дополнительных таблиц и т.д.
Все это лихо работает, НО..
Не будет ли это тормозом при достаточно больших объемах (сотни тысяч записей) картотеки ?
Да и вообще, насколько это "грамотно" с т.з. профессионального разработчика БД ?
Спасибо всем участникам
TohaNik (2005-11-03 14:40:00) [1]
> Да не симпатишная она. Совсем. Увы..
:( А мы стараемся.
msguns (2005-11-03 14:08:00) [2]>TohaNik © (03.11.05 14:06) [26]
>Не Выкай...-те;)
заметано ;)
>потом симпатишной библиотекарше говоришь
Да не симпатишная она. Совсем. Увы..
TohaNik (2005-11-03 14:06:00) [3]
> msguns © (03.11.05 13:28) [24]
Не Выкай...-те;)
> У меня вся база состиоит из одной (!) таблицы и 5 справочников.
> Где тут огород городить ?
А в прелагаемом в [23] из 2-х справочников и 2-х таблиц с общим меньшим количеством полей.
А вот представь, через полгода захотят, ну вдруг, ввести реквизит кто выдал
книгу. Ну ты начинаешь воду варить - типа жестко задано все, а потом симпатишной библиотекарше говоришь:
- ну только для Вас и только ради Вас ;)
Добавляешь в первую таблицу "Выдал", во вторую ФИО выдающих и пьешь...
чай с тортиком;)
Sergey13 (2005-11-03 13:49:00) [4]2[24] msguns © (03.11.05 13:28)
>Блин, где моя расческа ?
Не понимаю я твоих страхов. Сам рассказал страшилку, и сам же испугался. 8-)
При показе таблицы просто соединяешь ее со справочником. При внесении новой записи, определяешь какого типа подставлен параметр и выбираешь из справочника все значения этого типа. Помоему нормально. Творческое развитие твоей идеи. 8-)
Единственное, нужно (желательно) отдельную форму для справочника, который и будет работать точно по твоему алгоритму.
msguns (2005-11-03 13:28:00) [5]>Курдль © (03.11.05 11:49) [21]
>..призывом Э.Кодда не лепить себе никаких догм, связанных с реляционными принципами, а руководствоваться лишь здравым смыслом и удобством работы.
Вай, какой хороший и красивый лозунг ! Я тоже так хачу ;))
>Sergey13 © (03.11.05 12:00) [22]
>Что тебя так напугало? Это же практически твоя идея. 8-)
Идея посадить яблоню и подождать 5 лет, пока оно начнет плодоносить, вместо того, чтобы просто скушать яблоко, купленное на рынке - это моя идея ???!!!
Блин, где моя расческа ?
>TohaNik © (03.11.05 12:34) [23]
То, что Вы написали про 4 таблицы - это уже чуть ли не объектная БД. Ну нафига тут она. Надо всего-навсего картотека изданий. Для узкой специфики. Вовсе не на тираж и вообще не на продажу ;) У меня вся база состиоит из одной (!) таблицы и 5 справочников. Где тут огород городить ?
>А псевдосправочник это, как я понимаю, так это просто список наиболее часто применяемых значений и действительно его пополнение при каждом впервые введенном приведет сначала к избыточности, а потом с большой вероятностью и к бардаку
Абсолютно правильно понимаете. А вот на счет "приведет.. к избыточности.. и бардаку, позвольте Вам не позволить. В смысле не согласная я ;))
Ну ведь не надо в самом деле равнять сложные многопользовательские и многофункциональные модели сравнивать с "телефонным справочником".
TohaNik (2005-11-03 12:34:00) [6]
> msguns © (02.11.05 18:36) [12]
</I
> Речь идет не о справочниках каких-то названий (вы меня все
> каким-то "Марсом" пугаете), а о нескольких жестко заданных
> (если и меняемых, то крайне редко) вариантах значений какого-
> то атрибута.
>
Если крайне редко, то есть ли необходимость их включать в список уникальных значений, ведь это наверняка какое-то особое описание, возможно просто пометка.
А по теме, как вариант.
4 таблицы.
1. Справочник реквизитов
2. Детализация реквизитов со ссылкой на реквизит.
3. Таблица собственно объектов учета.
4. Детализация по объектам. А вот здесь уже "отводится стринг небольшой длины собственно для хранения нативного текста" с возможностью выбора из
таблицы 2 либо особой пометки.
Такая модель ИМХО представляется более гибкой.
А псевдосправочник это, как я понимаю, так это просто список наиболее часто применяемых значений и действительно его пополнение при каждом впервые введенном приведет сначала к избыточности, а потом с большой вероятностью и к бардаку.
Sergey13 (2005-11-03 12:00:00) [7]2[12] msguns © (02.11.05 18:36)
>Долго волосы разглаживал, ибо дыбом встали ;)
Что тебя так напугало? Это же практически твоя идея. 8-)
Курдль (2005-11-03 11:49:00) [8]
> Это у них домашняя заготовка. Я слышал это же в том же контексте
> около 10 лет назад. Именно в аналогичной ситуации.
Так и я это тогда же слышал! Но пробирает ведь! И гармонично переплетеатся с призывом Э.Кодда не лепить себе никаких догм, связанных с реляционными принципами, а руководствоваться лишь здравым смыслом и удобством работы.
Sergey_Masloff (2005-11-03 11:43:00) [9]Курдль © (03.11.05 11:38) [19]
>Но когда он подписал ее "ВЕСЬ МИР" - все разродились ржанием! Ведь как >изящно и в то же время - как бессмысленно это выглядело! :)
Это у них домашняя заготовка. Я слышал это же в том же контексте около 10 лет назад. Именно в аналогичной ситуации.
Курдль (2005-11-03 11:38:00) [10]
> Sergey Masloff (02.11.05 13:59) [10]
> Подумай про дерево - это легко и вопреки расхожему мнению
> очень удобно и эффективно.
Когда преподаватель из центра оракла нарисовал на доске одну таблицу со связью "один-ко-многим" на саму себя, все заинтригованно переглядывались.
Но когда он подписал ее "ВЕСЬ МИР" - все разродились ржанием! Ведь как изящно и в то же время - как бессмысленно это выглядело! :)
roottim (2005-11-03 09:09:00) [11]Вариант+
create table app_bonus (ParamName varchar2(100), Value varchar2(1000));
insert into app_bonus(
'издание:наличие',
'В наличии;В ремонте;В розыске;На руках'
);
insert into app_bonus(
'издание:тип издания',
'Книга;Журнал;Газета;Карта;Подшивка'
);
Пишеш функции бд:
GetAppBonus(p_pname varchar2) return varchar2;
SetAppBonus(p_pname varchar2, p_value varchar2);
Заполняеш свой комбобохcbox.ComaText := DelphiGetAppBonus(.., ..);
При вводе нового значения обновляеш параметры таблицы
evvcom (2005-11-02 22:43:00) [12]
> а о нескольких жестко заданных (если и меняемых, то крайне
> редко) вариантах значений какого-то атрибута
Кому будет разрешено менять эти значения? Если безответственному пользователю, то очень скоро увидишь, что твое "крайне редко" почему-то быстренько очень превратилось в "крайне нередко". Поверь, я был свидетелем подобного, причем на этом деле сидел, как предполагалось, "ответственный" пользователь.
Sergey Masloff (2005-11-02 21:27:00) [13]Anatoly Podgoretsky © (02.11.05 21:15) [14]
>Разные сущности разные таблицы,
>количество бояться не стоит. Стоит бояться бардака.
Так сущность одна - классификатор. У уж ящики/упаковки юр/физлица это все равно, вобщем-то. И хранение всего в одном дереве бардак не увеличит.
Baltika-37 (2005-11-02 21:25:00) [14]Как написал Sergey13 © (02.11.05 12:40) [2],
Прекрасное решения даже для миллионов записей:
Самый простой вариант:
ID int,
ClassId Int,
ObjId Int
ObjName varchar(200),
ObjValue varchar(250)
Выборка в проидексированной странице по паре (ClassId, ObjId) либо (ClassId, ObjName) будет практически мгновенной.
Anatoly Podgoretsky (2005-11-02 21:15:00) [15]База должна отражать сущность. Разные сущности разные таблицы, количество бояться не стоит. Стоит бояться бардака.
Sergey Masloff (2005-11-02 18:43:00) [16]msguns © (02.11.05 18:36) [12]
>Согласитесь, делать "дерево" для двух-трех десятков значений (в сумме) >подобных атрибутов не совсем разумно.
Пачиму? ;-) Не согласимся (я). Какая фиг разница одна таблица. Полем больше вот тебе и дерево. Что смущает-то - вот что непонятно.
msguns (2005-11-02 18:36:00) [17]>Sergey13 © (02.11.05 13:09) [8]
Долго волосы разглаживал, ибо дыбом встали ;)
>evvcom © (02.11.05 13:51) [9]
>Если речь идет об обычном пользователе, то я не был бы так оптимистичен
Я, возможно, неубедительно объяснил.
Речь идет не о справочниках каких-то названий (вы меня все каким-то "Марсом" пугаете), а о нескольких жестко заданных(если и меняемых, то крайне редко) вариантах значений какого-то атрибута.
Согласитесь, делать "дерево" для двух-трех десятков значений (в сумме) подобных атрибутов не совсем разумно.
Спасибо.
Есть еще мнения ?
Schooler (2005-11-02 14:48:00) [18]
> Однако я все же склоняюсь к тому, что вводит данные не обезьяна...
А вот это Ты зря...
Слушай evvcom © (02.11.05 13:51) [9] !!!
Sergey Masloff (2005-11-02 13:59:00) [19]Сделай 1 (одну) справочную таблицу и забудь о проблемах.
Можно "деревянную" (я бы так и сделал) или 2 уровневую (типы->значения)
Подумай про дерево - это легко и вопреки расхожему мнению очень удобно и эффективно.
evvcom (2005-11-02 13:51:00) [20]
> Однако я все же склоняюсь к тому, что вводит данные не обезьяна,
> а человек разумный. Который свои ошибки быстро заметит
> и своевременно исправит.
Если речь идет об обычном пользователе, то я не был бы так оптимистичен. Чаще всего пользователю по барабану, что набито в справочнике "Конфета Марс" или "Марс, просто Марс". Но когда речь зайдет о подсчете таких якобы одинаковых предметов, они тебе всю плешь проедят, что ты неправильно программу написал. В данном случае я за нормализацию и использование реальных справочников, а также на справочник должен быть "посажен" ответственный человек (если такое возможно).