powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Для каждого типа своя таблица. На сколько это правильное решение?
14 сообщений из 14, страница 1 из 1
Для каждого типа своя таблица. На сколько это правильное решение?
    #37409225
DSFC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
В проектируемой ИС есть несколько типов услуг. Все эти услуги занесены в одну общую таблицу, но зато есть различные параметры у каждого типа услуг, которые описываются в отдельных таблицах (для каждого типа услуг своя таблица с параметрами).
Для того чтобы пользовательскому коду было легче разобраться с услугой какого типа он имеет сейчас дело и какие параметры он может вызывать, хотелось бы воплотить следующее: создать таблицу типов услуг, и в общей таблице услуг добавить поле-внешний ключ от созданной таблицы. На основании определенного типа он будет обращаться к нужной таблице параметров. Насколько это решение считается корректным?
Просто не давно в сети встретил статью, где в пух и прах разносят данный подход, причем не сильно это все аргументируя. Хотелось бы уточнить у бывалых. Заранее спасибо.
...
Рейтинг: 0 / 0
Для каждого типа своя таблица. На сколько это правильное решение?
    #37409249
koJIo6ok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DSFC,
а как там предлагалось сделать?
конечно нормально-рабочий вариант у вас
...
Рейтинг: 0 / 0
Для каждого типа своя таблица. На сколько это правильное решение?
    #37409300
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DSFC,

номальный подход, наследование таблиц называется. На форуме за последние дни обсуждалось раз несколько, поищите.
...
Рейтинг: 0 / 0
Для каждого типа своя таблица. На сколько это правильное решение?
    #37409667
DSFC...создать таблицу типов услуг...
Что в ней будет?
DSFC...он будет обращаться к нужной таблице параметров...
Как это будет выглядеть?
...
Рейтинг: 0 / 0
Для каждого типа своя таблица. На сколько это правильное решение?
    #37410892
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DSFC Просто не давно в сети встретил статью, где в пух и прах разносят данный подход, причем не сильно это все аргументируя.
Ссылкой не поделитесь? :)
...
Рейтинг: 0 / 0
Для каждого типа своя таблица. На сколько это правильное решение?
    #37411071
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разные таблицы для одной сущности (услуга) это бред.
Сто раз перетирали уже. Эти услуги отличаются только набором атрибутов (EAV ?).
...
Рейтинг: 0 / 0
Для каждого типа своя таблица. На сколько это правильное решение?
    #37411195
DSFC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автора как там предлагалось сделать?
Там предлагалось:
Делаются отдельные таблицы под каждый тип (там рассматривался на примере тип транспортных средств). О наследовании таблиц там ни слова. Таблица с описанием всех типов (ту, о которой я говорил в начале поста, чтобы пользовательский код мог автоматически определять тип объекта с которым имеет дело) категорически возбранялась - в статье утверждалось, что это метаданные, и их нужно полностью закодировать в логике сервера приложений, тем самым уменьшатся запросы к БД, а в случае изменения логики, править придется только код апплекейшн сервера.

авторСсылкой не поделитесь? :)
В том то и дело, что наткнулся на эту статью совершенно случайно, не сохранил.

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



авторнаследование таблиц называется
Совершенно верно на уровне БД - будет организовано наследование таблиц.

авторКак это будет выглядеть?
Если про мой вариант реализации на уровне клиентского кода, то примерно будет следующее:
Общий Класс Service реализующий Интерфейс ServiceInt к примеру. От это класса наследуются классы описывающие каждый тип услуг
В процессе работы приложения мы получаем объект типа Service и чтобы полноценно работать с этим объектом мы определяем подробно его тип через метод GetСoncreteTypeService().
Этот метод делает запрос в БД, цепляет идентификатор типа услуг от туда и уже на основании этого метод возвращает либо тип услуг, либо возвращает приведенный объект конкретного типа услуг. А конкретный класс типа услуг работает с заранее определённой для него таблицей.



авторЭти услуги отличаются только набором атрибутов (EAV ?).
Нет не только - в зависимости от типов услуг по разному рассчитывается тариффикационная сетка. не думаю, что EAV будет оптимальным применением.
...
Рейтинг: 0 / 0
Для каждого типа своя таблица. На сколько это правильное решение?
    #37411275
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не думаю, что EAV будет оптимальным применением. Будет. Т.к. добавление новой услуги/тарифа - всего лишь коррекция записей таблиц EAV. Ну возможно SQL.
По производительности возможны незначительные проблемы. И то в случаях мегатрудоемких вычислений на лету и большом числе свойств.

Вы же упрямо настаиваете на перманентной переделке структуры и пересборке апп-сервера. Если Вы знаете "как надо", то зачем спрашиваете ?
Обсуждения на СКЛ.РУ намного полезней некот. статей. Хотя бы потому, что в прениях участвуют мемберы, прочитавшие этих статей вагон и тележку. :)
...
Рейтинг: 0 / 0
Для каждого типа своя таблица. На сколько это правильное решение?
    #37411446
DSFC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LSV, я пока не на чем не настаиваю. Сейчас все в стадии проектирования, в стадии обсуждения и я премного благодарен форумчанам, Вам в частности, за участие.

Опишу немного ситуацию по подробней. В той ИС, которая сейчас проектируется, существует всего два типа услуг.
1) Количественная. Тут все очень просто Петров положил 5 кирпичей получил 5 рублей (по рублю на кирпич). Количество оказываемых услуг умножается на тарифную ставку.
2) Временная, тут немного посложней. Во-первых, Петров проработал 3 часа 21 минута - значит тарифная часовая ставка должна быть умножена на временной результат. Во-вторых, каждая временная услуга содержит дополнительные параметр такие как минимальное время работы, часы подготовке к работе. Т.е. если минималка содержит 5 часов, а Петров отработал 3 часа, то его тарифная ставка умножится на 5. К любому результату произведения так же прибавятся тарифная ставка умноженная на количество часов подготовки к работе.

И ещё тариф - это произвольная комбинация услуг различного типа.

Других типов услуг не предвидятся пока. Но не факт, что их не будет. Но пока даже фантазии не хватает какие типы услуг могут быть ещё...
...
Рейтинг: 0 / 0
Для каждого типа своя таблица. На сколько это правильное решение?
    #37411634
koJIo6ok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DSFC,
незнаю незнаю
ну кто будет считать кто там сколько кирпичей положил или вести постоянный хронометраж рабочего времени?
...
Рейтинг: 0 / 0
Для каждого типа своя таблица. На сколько это правильное решение?
    #37411982
DSFC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
koJIo6ok, про кирпичи я утрировал. "кирпич" можно заменить на любую другую услугу строительную и нестроительную, которую могут выполнять целые бригады к примеру...

Такого ТЗ ИС.
...
Рейтинг: 0 / 0
Для каждого типа своя таблица. На сколько это правильное решение?
    #37412412
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вы создадите вьюшки
общая таблица с левым соединением со всеми деталями плюс набор вьюх: общая таблица в внутренним соединением для каждой таблицы параметров
то воспользоватся вашими данными можно будет не только из вашей программы. (По статистике данные живут дольше программ)
EAV - зло. Сомнительные достоинства при несомненных недостатках. Нужны очень веские доводы для его использования.
...
Рейтинг: 0 / 0
Для каждого типа своя таблица. На сколько это правильное решение?
    #37412714
Фотография pilot911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257Если вы создадите вьюшки
общая таблица с левым соединением со всеми деталями плюс набор вьюх: общая таблица в внутренним соединением для каждой таблицы параметров
то воспользоватся вашими данными можно будет не только из вашей программы. (По статистике данные живут дольше программ)
EAV - зло. Сомнительные достоинства при несомненных недостатках. Нужны очень веские доводы для его использования.

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

я бы свойства с одинарными значениями добавлял столбцами в таблицу услуги, а свойства со множественными значениями - отдавал в EAV
...
Рейтинг: 0 / 0
Для каждого типа своя таблица. На сколько это правильное решение?
    #37412866
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DSFC,

По-моему, вполне адекватная и рабочая структура.
Но могу посоветовать сделать специализированные таблицы для типов услуг по возможности "самодостаточными", то есть хранить в них все содержательные данные. Так, чтобы по каждому чиху не требовалось лезть в общую таблицу.
Ну а если какой-то содержательный атрибут необходим и в общей таблице, то стоит задуматься о дублировании.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Для каждого типа своя таблица. На сколько это правильное решение?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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