Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: 60 справочников по 3 строки или один на 200  [new]
Megabyte
Member

Откуда: ближайшее заМКАДье
Сообщений: 4937
L_argo
Доводы в пользу 1-го большого справочника:

1. Для создания нового справочника нужно всего лишь вставить неск. записей. Не нужны права на создание таблицы.
2. Удаление лишних справочников - см. п.1.
3. Список таблиц в проекте будет кратким, а не с многими сотнями микротаблиц.
4. Вычитку нужного значения из "единого" справочника можно сделать простым одинаковым подзапросом или одной функцией.
5. Единый и простой гуи-интерфейс.

На избитый вопрос "а как же ссылочная целостность ?" встречный вопрос "Вам известна хоть одна известная ERP-система, где СЦ уровня СУБД используется ?"

Недостатки:
1. Сложно делать справочники, если они неодинаковые по структуре, н-р с дополнительными ссылками или инф. полями. Хотя эта проблема частично решается тем же EAV.
2. Безопасность ниже, чем в случае отдельных таблиц. Хотя и тут можно применить ряд мер, усложняющих несанкц. доступ.

Перевожу:

1) Можно говнокодить.
2) Можно говнокодить.
3) Боюсь большого кол-ва таблиц.
4) Не умею писать сложные sql-запросы.
5) Единственный, наверное, аргумент ЗА. И то, не факт, что так будет.
19 ноя 20, 16:14    [22235493]     Ответить | Цитировать Сообщить модератору
 Re: 60 справочников по 3 строки или один на 200  [new]
L_argo
Member

Откуда:
Сообщений: 1297
Megabyte
Перевожу:

1) Можно говнокодить.
2) Можно говнокодить.
3) Боюсь большого кол-ва таблиц.
4) Не умею писать сложные sql-запросы.
5) Единственный, наверное, аргумент ЗА. И то, не факт, что так будет.
Перевод неверен, т.к. не содержит аргументации.

1 и 2 "Можно говнокодить" касается абсолютно любого решения.
3. Зачем нужно 350 таблиц, если можно иметь 50 ?
4. Зачем писать сложный запрос, если можно написать простой ?

зы: Говнокод - код написанный другим человеком (с)
19 ноя 20, 17:05    [22235536]     Ответить | Цитировать Сообщить модератору
 Re: 60 справочников по 3 строки или один на 200  [new]
iap
Member

Откуда: Москва
Сообщений: 47024
L_argo
3. Зачем нужно 350 таблиц, если можно иметь 50 ?
Вы удивитесь, но ВСЕ таблицы ВСЕЙ базы можно хранить в ОДНОМ поле ОДНОЙ таблицы!
Вот только станет ли от этого легче?

Сообщение было отредактировано: 19 ноя 20, 17:56
19 ноя 20, 18:01    [22235587]     Ответить | Цитировать Сообщить модератору
 Re: 60 справочников по 3 строки или один на 200  [new]
fkthat
Member

Откуда:
Сообщений: 3840
L_argo
Зачем нужно 350 таблиц, если можно иметь 50 ?

Да можно вообще одну. У такой таблицы в реляционной теории даже название какое-то есть, только я его не помню.
19 ноя 20, 18:26    [22235610]     Ответить | Цитировать Сообщить модератору
 Re: 60 справочников по 3 строки или один на 200  [new]
SERG1257
Member

Откуда:
Сообщений: 2788
Как видно доводы универсального справочника пересекаются с доводами любителей EAV.
Но в отличие от EAV, универсальный справочник не влияет на производительность.

> "Можно говнокодить" касается абсолютно любого решения
Давайте предположим что программист облажался - пишет в справочник "MyTable", а читает из "My Table"
И вместо явного эксепшена получаем скрытый баг. Хотя о чем это я. Тормоза придумали трусы, а РАЗРАБОТЧИКИ не ошибаются.

>встречный вопрос "Вам известна хоть одна известная ERP-система, где СЦ уровня СУБД используется ?"
В лучших домах ЛондОна и Парижа инструментом не пользуются значит и мы не будем.

Шамиль Фаридович, обратите внимание на аргументы - рационального в них мало, еще чуть-чуть и будет переход на личности.
Это вопрос веры - упирать надо на другие аргументы: Кодд не одобряет смешение метаданных (тип справочника) в данных

>Вы удивитесь, но ВСЕ таблицы ВСЕЙ базы можно хранить в ОДНОМ поле ОДНОЙ таблицы!
Можно но по канону три таблицы: E, A, V
19 ноя 20, 18:27    [22235611]     Ответить | Цитировать Сообщить модератору
 Re: 60 справочников по 3 строки или один на 200  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31602
L_argo
Доводы в пользу 1-го большого справочника:
Интересно, почему все доводы за EAV приводят специалисты не по СУБД, а по другим технологиям? Совпадение?

Давайте я лучше приведу такие же плюсы использования одной переменной и одного объекта в программе, написанной на Java или Дельфи?

А то достало уже множество переменных, дурацких классов, пусть всё будет по современному: весь код в одной процедуре с goto, и вместо переменных один массив из строк, в каждый элемент которого можно будет класть то, что надо в данный момент!

Какой я молодец, видите, никогда на Джаве и Дельфи не программировал, и сразу всё понял, как правильно делать! Всё упростил!
19 ноя 20, 19:24    [22235654]     Ответить | Цитировать Сообщить модератору
 Re: 60 справочников по 3 строки или один на 200  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7429
Ares_ekb
Relic Hunter
список сотрудников это справочник? а список проектов над какими они работают тоже?
Их иногда называют мастер-данными. С одной стороны, они похожи на справочники тем, что на них много ссылок из других данных, тем, что их нужно унифицировать и гармонизировать. С другой стороны, они похожи на транзакционные данные частотой изменений и относительно сложной структурой.
ну нету в реляционных теориях никакох справочников. есть в таблице ID уже сущность, нету - ассоциация. вот и все как просто.
19 ноя 20, 19:32    [22235657]     Ответить | Цитировать Сообщить модератору
 Re: 60 справочников по 3 строки или один на 200  [new]
L_argo
Member

Откуда:
Сообщений: 1297
iap
Вы удивитесь, но ВСЕ таблицы ВСЕЙ базы можно хранить в ОДНОМ поле ОДНОЙ таблицы!
А что удивительного ? Это FAT или NTFS.

Контр-аргументы свелись к шуткам-прибауткам.
И что-то никто не назвал ERP-систем, в кот. соблюдается СЦ и все каноны РСУБД.

Видимо местные знатоки считают себя выше всех разработчиков ERP-систем...
19 ноя 20, 19:52    [22235663]     Ответить | Цитировать Сообщить модератору
 Re: 60 справочников по 3 строки или один на 200  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 34241
Блог
alexeyvg
Давайте я лучше приведу такие же плюсы использования одной переменной и одного объекта в программе, написанной на Java или Дельфи?

А то достало уже множество переменных, дурацких классов, пусть всё будет по современному: весь код в одной процедуре с goto, и вместо переменных один массив из строк, в каждый элемент которого можно будет класть то, что надо в данный момент!


я подозреваю, что однажды так и будет,
осталось главное - придумать модное название для вашей архитектуры )
19 ноя 20, 21:47    [22235737]     Ответить | Цитировать Сообщить модератору
 Re: 60 справочников по 3 строки или один на 200  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31602
L_argo
Контр-аргументы свелись к шуткам-прибауткам.
Что можно серьёзного сказать про такую идею?
Я вам привёл пример, пообсуждайте его в "Дельфи", серьёзных ответов будет меньше, чем здесь.
L_argo
И что-то никто не назвал ERP-систем, в кот. соблюдается СЦ и все каноны РСУБД.
Не надо про "все каноны" и "СЦ".
Мы же тут обсуждаем не "все каноны" и "СЦ", а конкретный вопрос, "использование для всех справочников одной таблицы".
Ни в одной ЕРП такого, конечно, нет.
И местные знатоки, считая себя на уровне разработчиков крутых ЕРП, делают так же.

И EAV местные знатоки считают нужным использовать, временами, только не как "вся база в трёх универсальных таблицах", или "универсальная объектная модель", а так же, как это делается в серьёзных системах, для доп атрибутов.
20 ноя 20, 20:55    [22236226]     Ответить | Цитировать Сообщить модератору
 Re: 60 справочников по 3 строки или один на 200  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7429
Есть более серьёзный вопрос - куда поместить информацию о версии программы?
20 ноя 20, 22:34    [22236253]     Ответить | Цитировать Сообщить модератору
 Re: 60 справочников по 3 строки или один на 200  [new]
Гулин Федор
Member

Откуда: МИНСК
Сообщений: 1273
Я сталкивался с подходом большой таблицы
возможен микс как на текущем проекте
мелочевка засунута в refdata
большие справочники отдельно

1) проблема в том что когда надо ввести новое поле
в большую таблицу - либо для всех добавлять либо выносить справочник отдельно

2) когда вешали поверх справончиков QlickView
пришлось делать вью для каждого спраовчника из большой таблицы
(потому что Клик связи выставлял по именам полей )

Но в целом микс возможен
ибо 1000 мелких справочников тоже НЕ сильно удобно.
23 ноя 20, 16:24    [22237312]     Ответить | Цитировать Сообщить модератору
 Re: 60 справочников по 3 строки или один на 200  [new]
L_argo
Member

Откуда:
Сообщений: 1297
автор
а конкретный вопрос, "использование для всех справочников одной таблицы".
Зачем передергивать ?
Кто говорил про все справочники ?
Речь шла о однотипных минисправочниках из 2-3 полей. В большой системе их могут быть сотни.
Н-р в 1С это называется перечисления.
23 ноя 20, 17:45    [22237384]     Ответить | Цитировать Сообщить модератору
 Re: 60 справочников по 3 строки или один на 200  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28147
alexeyvg
Мы же тут обсуждаем не "все каноны" и "СЦ", а конкретный вопрос, "использование для всех справочников одной таблицы".
Ни в одной ЕРП такого, конечно, нет.

Сейчас может и нет, а вот в АИС ТПС НК "ЮКОС" именно так и было: одна таблица SR_REFERENCE
23 ноя 20, 18:05    [22237391]     Ответить | Цитировать Сообщить модератору
 Re: 60 справочников по 3 строки или один на 200  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28147
L_argo
Речь шла о однотипных минисправочниках из 2-3 полей. В большой системе их могут быть сотни.

Да, именно для таких справочников, где код, наименование и описание.
23 ноя 20, 18:07    [22237393]     Ответить | Цитировать Сообщить модератору
 Re: 60 справочников по 3 строки или один на 200  [new]
SERG1257
Member

Откуда:
Сообщений: 2788
>ибо 1000 мелких справочников тоже НЕ сильно удобно.
Чем, черт побери, 1000 вьюшек удобнее 1000 мелких таблиц.

Где выгода?

Тем более у ТС, и в реальности это ДЕСЯТКИ (даже не сотни) справочников.
Они легко скриптуются.
23 ноя 20, 18:37    [22237416]     Ответить | Цитировать Сообщить модератору
 Re: 60 справочников по 3 строки или один на 200  [new]
Шамиль Фаридович
Member

Откуда: Саратов
Сообщений: 481
Да, речь об однотипных справочниках, причем желательно не только по форме, но и по содержанию (цвет в статусы не запихивать).

Расскажу как было на другом проекте.
Для каждого поля выбора делался отдельный справочник в базе с FK на него + энам в бэке.
Таким образом, любое изменение необходимо было делать сразу в 2х местах: база и бэк.
Это время от времени порождало ошибки несогласованности и, в целом, было избыточным.

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

Я попросил бэк показать код, работающий с 1 большим справочником, и мне понравилось:
небольшой DAL-класс, всего пару методов, и нет необходимости согласований с базой.
Нужно лишь дождаться, пока базист закроет свой тикет. Это и правда увеличивает скорость разработки,
пусть и сохраняет все описанные в этом топике недостатки.
23 ноя 20, 20:02    [22237457]     Ответить | Цитировать Сообщить модератору
 Re: 60 справочников по 3 строки или один на 200  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31602
L_argo
автор
а конкретный вопрос, "использование для всех справочников одной таблицы".
Зачем передергивать ?
Кто говорил про все справочники ?
Речь шла о однотипных минисправочниках из 2-3 полей. В большой системе их могут быть сотни.
Н-р в 1С это называется перечисления.
Ну, из поста ТС точно непонятно, что имеется в виду.

И в 1С, уверен, нельзя будет занести в поле "цвет" значение "твёрдый".

В 1С это не "одна табличка", а некая система "перечисления", которая устанавливает перечень допустимых значений и т.п. С кучей метаданных, интерфейсными формами, отчётами для администратора и т.д.
А сделано так потому, что в 1С свой язык, по сути, своя РСУБД, которая есть надстройка над ядерной РСУБД.

То есть в системе уровня SAP, 1C, SharePoint, MS, Excxange такое можно понять. Притом не для всех справочников, по критерию "в которых мало записей", а в определённых бизнес-справочниках, что тоже большая разница.

А вот в системе ,в которой 30-100 справочников, нет своего ЯП, своего дизайнера, которая не является "конструктором", всего этого не надо.
Либо лишнее усложнение и удорожание, либо сделанная "для галочки" одна "таблица-справочник", которая, кроме удорожания кода, ничего не принесёт)
23 ноя 20, 22:18    [22237526]     Ответить | Цитировать Сообщить модератору
 Re: 60 справочников по 3 строки или один на 200  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31602
Шамиль Фаридович
то бэку придется писать новый метод для заполнения каждого такого выпадающего списка.
...
Это и правда увеличивает скорость разработки,
Если беку писать новый метод для заполнения каждого такого выпадающего списка в случае одного справочника, то никакой экономии не будет.

Проблема в данном случае не в недостатках отдельных справочников, а в программной архитектуре (API) бэка.
23 ноя 20, 22:22    [22237528]     Ответить | Цитировать Сообщить модератору
 Re: 60 справочников по 3 строки или один на 200  [new]
L_argo
Member

Откуда:
Сообщений: 1297
автор
Если беку писать новый метод для заполнения каждого такого выпадающего списка в случае одного справочника, то никакой экономии не будет.
А зачем писать, если можно не писать ? Заполнение и импорт всех справочников происходит в одной форме, которая принимает в качестве вх.параметра лишь имя конкретного справочника. Причем это прекрасно ложится на нативный SQL.
Именно в этом и фишка - сделать один несложный код для всех.
24 ноя 20, 09:56    [22237671]     Ответить | Цитировать Сообщить модератору
 Re: 60 справочников по 3 строки или один на 200  [new]
Megabyte
Member

Откуда: ближайшее заМКАДье
Сообщений: 4937
L_argo
автор
Если беку писать новый метод для заполнения каждого такого выпадающего списка в случае одного справочника, то никакой экономии не будет.
А зачем писать, если можно не писать ? Заполнение и импорт всех справочников происходит в одной форме, которая принимает в качестве вх.параметра лишь имя конкретного справочника. Причем это прекрасно ложится на нативный SQL.
Именно в этом и фишка - сделать один несложный код для всех.

А кто мешает сделать один метод, но параметризированный, где параметром выступает имя таблицы-справочника(раз уж у вас справочники одной формы)?
24 ноя 20, 13:31    [22237831]     Ответить | Цитировать Сообщить модератору
 Re: 60 справочников по 3 строки или один на 200  [new]
SERG1257
Member

Откуда:
Сообщений: 2788
Шамиль Фаридович
Это и правда увеличивает скорость разработки, пусть и сохраняет все описанные в этом топике недостатки.
Вот, честный ответ: быстро, дешево и сердито.
Я знаю другие программисткие приемы увеличивающие скорость разработки. Правда другие программисты называют их говноко техническим долгом, проводят всякие коде-ревью и рефакторинги, все ради того парня, который будет это поддерживать.
В данном случае тот парень он не ваш, не разработчик.
Пусть в случае универсального справочника вероятность косяков небольшая (по сравнению с логическим продолжением этого подхода в EAV), но зачем плодить технический долг, срезать углы (уголки даже) с вероятностью переделывать.
24 ноя 20, 17:18    [22237927]     Ответить | Цитировать Сообщить модератору
 Re: 60 справочников по 3 строки или один на 200  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31602
L_argo
автор
Если беку писать новый метод для заполнения каждого такого выпадающего списка в случае одного справочника, то никакой экономии не будет.
А зачем писать, если можно не писать ? Заполнение и импорт всех справочников происходит в одной форме, которая принимает в качестве вх.параметра лишь имя конкретного справочника. Причем это прекрасно ложится на нативный SQL.
Именно в этом и фишка - сделать один несложный код для всех.
А зачем каждый раз писать новый метод, для справочников в отдельных таблицах?
Разные таблицы, или одна - это просто чуть разные метаданные, не более.
Сервер хранит имя таблицы, или вы сами - не надо, что бы от этого зависело количество методов в классах.

SERG1257
Шамиль Фаридович
Это и правда увеличивает скорость разработки, пусть и сохраняет все описанные в этом топике недостатки.
Вот, честный ответ: быстро, дешево и сердито.
Да тут и скорость программирования ни при чём.
Ребята пишут горы безумного ненужного кода на каждую новую таблицу, ибо "так надо", "все так делают".
Но если таблица будет виртуальная. самопальная, то почему то уже "так не надо", потому то уже не нужно делать на каждую строку большого справочника свой метод.
То есть если используется серверные метаданные sys.tables, то по фэн-шую надо сделать в дата-слое класс для каждой таблички, а вот если своя васяпупкин.tables, то почему то вдруг не надо, по тому же фен-шую. Очень странно.
Шамиль Фаридович
Если использовать модель со справочником для каждого поля выбора,
то бэку придется писать новый метод для заполнения каждого такого выпадающего списка.
Вот не надо делать для каждого из одинаковых справочников новый дата класс, DAL-класс и т.д.
Нужно для справочников вида выпадающий список делать один класс, и передавать в него имя таблицы.
24 ноя 20, 17:45    [22237937]     Ответить | Цитировать Сообщить модератору
 Re: 60 справочников по 3 строки или один на 200  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7429
На бэке (REST API) все справочники маленькие отдельные таблички, но возникли проблемы с их получением на фронте (Angular.js). Все вызовы с фронта - асинхронные. Это приводило к тому, что справочники загружались рандомно и некоторые не успевали приехать к открытию страниц. Было принято решение передавать все справочники одним методом на фронт, а фронт уже их сортировал куда нужно.
24 ноя 20, 19:20    [22237979]     Ответить | Цитировать Сообщить модератору
 Re: 60 справочников по 3 строки или один на 200  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31602
Relic Hunter
На бэке (REST API) все справочники маленькие отдельные таблички, но возникли проблемы с их получением на фронте (Angular.js). Все вызовы с фронта - асинхронные. Это приводило к тому, что справочники загружались рандомно и некоторые не успевали приехать к открытию страниц. Было принято решение передавать все справочники одним методом на фронт, а фронт уже их сортировал куда нужно.
ИМХО, это у обсуждаемой теме отношения не имеет.
Мы же не говорим про "простокод", когда на таблицы автоматом генерятся дата-классы, а запросы сам составляет фреймфорк?
Есть модель БД, есть архитектура, модель, сервера приложений, и есть модель клиентского приложения, и это три разные модели, а не одна. Притом для одной базы может быть несколько серверов приложений, и ещё больше приложений, да и баз, собственно, тоже может быть много, в общем случае.

И ничего не мешает иметь 50 таблиц-справочников, некую структуру классов в сервере приложений, с блэк-джеком и кэшированием, и один компактный массив для кода страницы (притом для разных страниц массивы разные, только то, что будет использовано на странице)
24 ноя 20, 23:56    [22238065]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Microsoft SQL Server Ответить