|
|
|
Для каждого типа своя таблица. На сколько это правильное решение?
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! В проектируемой ИС есть несколько типов услуг. Все эти услуги занесены в одну общую таблицу, но зато есть различные параметры у каждого типа услуг, которые описываются в отдельных таблицах (для каждого типа услуг своя таблица с параметрами). Для того чтобы пользовательскому коду было легче разобраться с услугой какого типа он имеет сейчас дело и какие параметры он может вызывать, хотелось бы воплотить следующее: создать таблицу типов услуг, и в общей таблице услуг добавить поле-внешний ключ от созданной таблицы. На основании определенного типа он будет обращаться к нужной таблице параметров. Насколько это решение считается корректным? Просто не давно в сети встретил статью, где в пух и прах разносят данный подход, причем не сильно это все аргументируя. Хотелось бы уточнить у бывалых. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2011, 10:35 |
|
||
|
Для каждого типа своя таблица. На сколько это правильное решение?
|
|||
|---|---|---|---|
|
#18+
DSFC, а как там предлагалось сделать? конечно нормально-рабочий вариант у вас ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2011, 10:45 |
|
||
|
Для каждого типа своя таблица. На сколько это правильное решение?
|
|||
|---|---|---|---|
|
#18+
DSFC, номальный подход, наследование таблиц называется. На форуме за последние дни обсуждалось раз несколько, поищите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2011, 11:02 |
|
||
|
Для каждого типа своя таблица. На сколько это правильное решение?
|
|||
|---|---|---|---|
|
#18+
DSFC...создать таблицу типов услуг... Что в ней будет? DSFC...он будет обращаться к нужной таблице параметров... Как это будет выглядеть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2011, 13:35 |
|
||
|
Для каждого типа своя таблица. На сколько это правильное решение?
|
|||
|---|---|---|---|
|
#18+
DSFC Просто не давно в сети встретил статью, где в пух и прах разносят данный подход, причем не сильно это все аргументируя. Ссылкой не поделитесь? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2011, 07:50 |
|
||
|
Для каждого типа своя таблица. На сколько это правильное решение?
|
|||
|---|---|---|---|
|
#18+
Разные таблицы для одной сущности (услуга) это бред. Сто раз перетирали уже. Эти услуги отличаются только набором атрибутов (EAV ?). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2011, 10:14 |
|
||
|
Для каждого типа своя таблица. На сколько это правильное решение?
|
|||
|---|---|---|---|
|
#18+
автора как там предлагалось сделать? Там предлагалось: Делаются отдельные таблицы под каждый тип (там рассматривался на примере тип транспортных средств). О наследовании таблиц там ни слова. Таблица с описанием всех типов (ту, о которой я говорил в начале поста, чтобы пользовательский код мог автоматически определять тип объекта с которым имеет дело) категорически возбранялась - в статье утверждалось, что это метаданные, и их нужно полностью закодировать в логике сервера приложений, тем самым уменьшатся запросы к БД, а в случае изменения логики, править придется только код апплекейшн сервера. авторСсылкой не поделитесь? :) В том то и дело, что наткнулся на эту статью совершенно случайно, не сохранил. Т.е. основная мысль статьи той, метаданные хранить на уровне логике паттернов. Хотя на мой взгляд мы как раз гибкость тут и теряем. Поэтому и хотел уточнить, авторнаследование таблиц называется Совершенно верно на уровне БД - будет организовано наследование таблиц. авторКак это будет выглядеть? Если про мой вариант реализации на уровне клиентского кода, то примерно будет следующее: Общий Класс Service реализующий Интерфейс ServiceInt к примеру. От это класса наследуются классы описывающие каждый тип услуг В процессе работы приложения мы получаем объект типа Service и чтобы полноценно работать с этим объектом мы определяем подробно его тип через метод GetСoncreteTypeService(). Этот метод делает запрос в БД, цепляет идентификатор типа услуг от туда и уже на основании этого метод возвращает либо тип услуг, либо возвращает приведенный объект конкретного типа услуг. А конкретный класс типа услуг работает с заранее определённой для него таблицей. авторЭти услуги отличаются только набором атрибутов (EAV ?). Нет не только - в зависимости от типов услуг по разному рассчитывается тариффикационная сетка. не думаю, что EAV будет оптимальным применением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2011, 11:11 |
|
||
|
Для каждого типа своя таблица. На сколько это правильное решение?
|
|||
|---|---|---|---|
|
#18+
не думаю, что EAV будет оптимальным применением. Будет. Т.к. добавление новой услуги/тарифа - всего лишь коррекция записей таблиц EAV. Ну возможно SQL. По производительности возможны незначительные проблемы. И то в случаях мегатрудоемких вычислений на лету и большом числе свойств. Вы же упрямо настаиваете на перманентной переделке структуры и пересборке апп-сервера. Если Вы знаете "как надо", то зачем спрашиваете ? Обсуждения на СКЛ.РУ намного полезней некот. статей. Хотя бы потому, что в прениях участвуют мемберы, прочитавшие этих статей вагон и тележку. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2011, 11:42 |
|
||
|
Для каждого типа своя таблица. На сколько это правильное решение?
|
|||
|---|---|---|---|
|
#18+
LSV, я пока не на чем не настаиваю. Сейчас все в стадии проектирования, в стадии обсуждения и я премного благодарен форумчанам, Вам в частности, за участие. Опишу немного ситуацию по подробней. В той ИС, которая сейчас проектируется, существует всего два типа услуг. 1) Количественная. Тут все очень просто Петров положил 5 кирпичей получил 5 рублей (по рублю на кирпич). Количество оказываемых услуг умножается на тарифную ставку. 2) Временная, тут немного посложней. Во-первых, Петров проработал 3 часа 21 минута - значит тарифная часовая ставка должна быть умножена на временной результат. Во-вторых, каждая временная услуга содержит дополнительные параметр такие как минимальное время работы, часы подготовке к работе. Т.е. если минималка содержит 5 часов, а Петров отработал 3 часа, то его тарифная ставка умножится на 5. К любому результату произведения так же прибавятся тарифная ставка умноженная на количество часов подготовки к работе. И ещё тариф - это произвольная комбинация услуг различного типа. Других типов услуг не предвидятся пока. Но не факт, что их не будет. Но пока даже фантазии не хватает какие типы услуг могут быть ещё... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2011, 12:44 |
|
||
|
Для каждого типа своя таблица. На сколько это правильное решение?
|
|||
|---|---|---|---|
|
#18+
DSFC, незнаю незнаю ну кто будет считать кто там сколько кирпичей положил или вести постоянный хронометраж рабочего времени? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2011, 13:41 |
|
||
|
Для каждого типа своя таблица. На сколько это правильное решение?
|
|||
|---|---|---|---|
|
#18+
koJIo6ok, про кирпичи я утрировал. "кирпич" можно заменить на любую другую услугу строительную и нестроительную, которую могут выполнять целые бригады к примеру... Такого ТЗ ИС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2011, 15:57 |
|
||
|
Для каждого типа своя таблица. На сколько это правильное решение?
|
|||
|---|---|---|---|
|
#18+
Если вы создадите вьюшки общая таблица с левым соединением со всеми деталями плюс набор вьюх: общая таблица в внутренним соединением для каждой таблицы параметров то воспользоватся вашими данными можно будет не только из вашей программы. (По статистике данные живут дольше программ) EAV - зло. Сомнительные достоинства при несомненных недостатках. Нужны очень веские доводы для его использования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2011, 19:26 |
|
||
|
Для каждого типа своя таблица. На сколько это правильное решение?
|
|||
|---|---|---|---|
|
#18+
SERG1257Если вы создадите вьюшки общая таблица с левым соединением со всеми деталями плюс набор вьюх: общая таблица в внутренним соединением для каждой таблицы параметров то воспользоватся вашими данными можно будет не только из вашей программы. (По статистике данные живут дольше программ) EAV - зло. Сомнительные достоинства при несомненных недостатках. Нужны очень веские доводы для его использования. тем более, есть ограничение на количество джоинов в разных база данных надо ориентироваться, что количество таблиц-свойств, соединенных в один запрос, не может превышать в среднем для разных баз 60 штук то есть, максимум 60 свойств... я бы свойства с одинарными значениями добавлял столбцами в таблицу услуги, а свойства со множественными значениями - отдавал в EAV ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2011, 04:13 |
|
||
|
Для каждого типа своя таблица. На сколько это правильное решение?
|
|||
|---|---|---|---|
|
#18+
DSFC, По-моему, вполне адекватная и рабочая структура. Но могу посоветовать сделать специализированные таблицы для типов услуг по возможности "самодостаточными", то есть хранить в них все содержательные данные. Так, чтобы по каждому чиху не требовалось лезть в общую таблицу. Ну а если какой-то содержательный атрибут необходим и в общей таблице, то стоит задуматься о дублировании. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2011, 09:50 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37409667&tid=1542051]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
170ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 499ms |

| 0 / 0 |
