|
|
|
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
|
|||
|---|---|---|---|
|
#18+
Всем здрасте. Прошу не судить строго, это моё первое сообщение на форуме :) Сразу хочу сказать, что для понимания моего вопроса нужно знать, что такое Single/Class/Concrete Table Inheritance, EAV (Entity-Attribute-Value) и Serialized LOB (Large object). Таким образом, вопрос мой связан с сопоставлением классам приложения таблиц БД (не очень оригинальная проблема, но всё же...). Возможно ли сосуществование сразу нескольких паттернов при проектировании, скажем, каталога товаров? Я знаю, что невозможного нет, но будет ли это разумным решением и не приведет ли к излишней запутанности БД? Скажем, я хочу сделать единую таблицу товаров, содержащую общие поля (код товара, название, описание, цена). В каталоге есть такие категории товаров, как автомобили и запчасти. Автомобили могут быть легковые и грузовые. У всех автомобилей есть общие характеристики (для них создаем еще одну таблицу для хранения только этих характеристик), но у легковых дополнительно задается число мест, а у грузовых - грузоподъемность. Я решаю хранить эту информацию в той же таблице всех автомобилей. Таким образом, я совмещаю сразу два паттерна: Class Table Inheritance (CTI) и Single Table Inheritance (STI). Запчасти тоже бывают разные, и я могу создать под каждый тип отдельную таблицу, получив еще один CTI. А могу еще и некоторые характеристики деталей запихать в одно большое поле (получив Serialized LOB), если вдруг выяснится, что поиск по этим характеристикам никому не нужен будет. В общем, путём скрупулезного аналеза предметной области, у меня получится вот такой монстр. Может ли это дать какие-то преимущества и вообще, хорош ли сам паттерн Class Table Inheritance? Ведь он связан с большим числом JOIN-ов при увеличении вложенности. В тоже время не всегда разумно запихивать все поля в одну большую таблицу. Также я хочу сделать некий инструментарий, который будет позволять иметь в приложении обычную иерархию классов, с которой очень легко работать, а в базе данных иметь нечто вроде выше описанного (по сути, скрыть от обычного программиста все сложности реализации маппинга между классами и таблицами и дать ему спокойно работать над своими задачами). Может ли такое комбинирование иметь реальное применение? Воспользовались бы вы такой моделью в своем приложении или сделали бы по-старинке либо одну большую таблицу, либо кучу отдельных и не стали бы "мешать мух с котлетами"? P.S. Прошу простить за некую сумбурность мыслей, но у меня сейчас самые что ни на есть творческие муки, и я пытаюсь найти правильное решение (хотя и допускаю, что в данном вопросе единственно правильного может и не существовать) :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2010, 21:30 |
|
||
|
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
|
|||
|---|---|---|---|
|
#18+
забудьте о паттернах и прочей публицистике и сразу все упростится. Особенно муки творчества. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2010, 22:38 |
|
||
|
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
|
|||
|---|---|---|---|
|
#18+
Вы, andy.s, фигней занимаетесь. На самом деле задача формулируется просто (поищите, здесь обсуждалось раз сто). Есть реляционная модель. Как данность. В силу того, что реализация предполагается средствами реляционной СУБД. Вопрос: какая метамодель (или метаметамодель) и как должна быть построена, чтобы... (здесь формулирование конкретной задачи). Однозначного ответа на этот вопрос нет, он будет зависеть от формулирования задачи. В принципе универсальную структуру для хранения всего вообще построить легко. Но практически ей будет пользоваться дико неудобно. Посему рекомендация: не занимайтесь поиском серебряной пули, ее нет. Есть компромисс между сложностью реализации, функционалом и практической целесообразностью, который в разных случаях будет разным. > я хочу сделать единую таблицу товаров, содержащую общие поля (код товара, название, описание, цена) В простом предложении вы умудрились сделать три ошибки. Абстрактного кода товара не бывает. Либо это внешний идентификатор, несущий некоторую смысловую нагрузку, либо суррогатная сущность, не несущая оной. В последнем случае говорить о коде бессмысленно. Описание чего бы то ни было контекстно зависимо. Цена также имеет функциональные зависимости. > Автомобили могут быть легковые и грузовые. Асфальтоукладчик вы к какой категории отнесете? А подъемный кран? А боевую машину пехоты? > я совмещаю сразу два паттерна Не читайте тупых книжек тупых авторов. Не пользуйтесь тупой терминологией, которую вы нашли у этих авторов. Читайте Дейта. У него есть все, что нужно. > путём скрупулезного аналеза предметной области Первая задача, которую должен решить начинающий архитектор баз данных - формальное описание предметной области. Как только решите - все остальные задачи будет решать очень просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2010, 22:46 |
|
||
|
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
|
|||
|---|---|---|---|
|
#18+
guest_20040621 , Не надо привязываться к конкретной базе, терминологии, автору. Также я не пытаюсь сделать универсальную базу. Наоборот, я не хочу пользоваться такими вещами, как EAV, когда существуют альтернативные пути. Если в приложении есть иерархия классов, то кто-то создает одну большую таблицу с сотней полей, кто-то для каждого класса создает отдельную таблицу, кто-то пихает все атрибуты в одно поле таблицы. Вопрос в том, будет ли иметь смысл комбинирование этих подходов. В любом случае для каждого выбранного варианта мне в своем приложении придется писать программный код для сохранения объектов в реляционной бд и получения их обратно. Так почему бы не предусмотреть ситуацию, когда эти подходы могут использоваться совместно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2010, 23:53 |
|
||
|
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
|
|||
|---|---|---|---|
|
#18+
> Вопрос в том, будет ли иметь смысл комбинирование этих подходов. Ответ: структура данных первична. А как и на чем пишется приложение - абсолютно фиолетово. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2010, 23:57 |
|
||
|
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
|
|||
|---|---|---|---|
|
#18+
Возможно ли сосуществование сразу нескольких паттернов при проектировании, скажем, каталога товаров? Я знаю, что невозможного нет, но будет ли это разумным решением и не приведет ли к излишней запутанности БД? Возможно. Структура данных в БД НЕ первична , более того, она изменяема и также подвергается рефакторингу на каждом цикле разработки. Первична доменная модель данных (если конечно приложение не является Data-aware), а то как данные лежат в конкретной БД никогда вас не должно ограничивать. Знание того как данные лежат - это дело конкретной реализации DAL, маппера, или вообще слоя хранимых процедур. Вполне приемлемо, когда в одной БД вы имеете реализации и Single Table Inheritance, и Concrete Table Inheritance, и EAV (в какой то мере) или Serialized LOB (в виде XML). Существование совместно всех этих видов связано НЕ с неправильным проектированием, а с тем, что невозможно сразу, на первом же цикле анализа/проектирования получить "идеальную" модель, именно ту которую вам хотелось бы. Часто это связано с тем, что невозможно понять какие атрибуты в модели будут статические, а какие динамические, в следствии чего возникает EAV или LOB. На следующих циклах, вполне может проясниться, что множество атрибутов могут быть перенесены из EAV в конкретные поля таблиц. Совместное существование в одной модели Single Table Inheritance, Concrete Table Inheritance и Class Table Inheritance - вообще обычное дело и выбор здесь обычно делается исходя из производительности, более того, часто на этапе нагрузочного тестирования или сопровождения. p/s/ и помните о паттернах, это помогает людям лучше друг друга понимать. ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2010, 19:41 |
|
||
|
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
|
|||
|---|---|---|---|
|
#18+
> Структура данных в БД НЕ первична Речь не об итеративности разработки, а о самодостаточности структуры данных. Она именно самодостаточна. Удивлен, что модератор раздела "проектирование" этого не понимает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2010, 20:43 |
|
||
|
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
|
|||
|---|---|---|---|
|
#18+
guest_20040621Речь не об итеративности разработки, а о самодостаточности структуры данных. Она именно самодостаточна. Удивлен, что модератор раздела "проектирование" этого не понимает. Модель может быть самодостаточной, но не на физическом уровне БД, а на аналитическом, на уровне слоя доменных объектов. А на физическом уровне БД может быть даже и вовсе не реляционная. Если на физическом уровне структура данных постоянна, тяжело изменяемая, то это та же монолитная, сильно связанная архитектура, что никак не может быть хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2010, 23:09 |
|
||
|
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
|
|||
|---|---|---|---|
|
#18+
Ну, просто моделей то много. Концептуальная важна, а маппинг на модель хранения и т.д. вторично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2010, 23:32 |
|
||
|
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
|
|||
|---|---|---|---|
|
#18+
> Модель может быть самодостаточной Не "может быть", а "должна быть". В противном случае это кривая поделка обкуренных китайских первоклассников. > но не на физическом уровне БД, а на аналитическом, на уровне слоя доменных объектов Откуда вдруг в реляционной СУБД взялись объекты? > Если на физическом уровне структура данных постоянна, тяжело изменяемая, то это та же монолитная, > сильно связанная архитектура, что никак не может быть хорошо Вот только не надо валить все в кучу. Эволюция структуры данных - это одна тема, кривая поделка - совершенно другая. Нормальная структура и должна проектироваться с пониманием последовательности и характера изменений. Неизменным может оставаться базовый функционал - мультиязычность или ограничение доступа. Даже не история. Все остальное подвержено эволюции совершенно естественным образом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2010, 23:39 |
|
||
|
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
|
|||
|---|---|---|---|
|
#18+
ViPRosНу, просто моделей то много. Концептуальная важна, а маппинг на модель хранения и т.д. вторично. Человек не понимает, что кроме физической модели есть более высокоуровневые(или просто другие) и более точно описывающие предметную область, а физическая модель - это "последняя миля". Не понимает что в качестве хранилища для одной предметной области может выступать что-либо другое кроме СУБД. Не понимает что хранилищ может быть множество и что они могут быть гетерогенны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2010, 10:01 |
|
||
|
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
|
|||
|---|---|---|---|
|
#18+
On 28.11.2010 21:30, andy.s wrote: > Возможно ли сосуществование сразу нескольких паттернов при проектировании, > скажем, каталога товаров? Я знаю, что невозможного нет, но будет ли это разумным > решением и не приведет ли к излишней запутанности БД? В смысле, можно ли применять несколько подходов сразу в одной БД ? Конечно же, можно, и нужно (если это оправдано). > паттерн Class Table Inheritance? Ведь он связан с большим числом JOIN-ов при > увеличении вложенности. JOIN-ы -- это ерунда. Дешёвая операция. Их хоть 30 может быть. Хоть 50. > Может ли такое комбинирование иметь реальное применение? Воспользовались бы вы > такой моделью в своем приложении или сделали бы по-старинке либо одну большую > таблицу, либо кучу отдельных и не стали бы "мешать мух с котлетами"? У нас в БД используется и подкатегории, и EAV одновременно. Обычные (фиксированные) атрибуты храняться в обычных таблицах, и их легко использовать в запросах. Динамические атрибуты храняться в EAV-структурах, и их можно создавать и удалять "на лету", но зато труднее использовать в запросах. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2010, 11:00 |
|
||
|
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
|
|||
|---|---|---|---|
|
#18+
Роман Дынник, Скорее он просто погорячился. Воще тут мало адекватных товарищей и я не хотел бы они рассорились. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2010, 11:09 |
|
||
|
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
|
|||
|---|---|---|---|
|
#18+
> Человек не понимает, что кроме физической модели есть более высокоуровневые(или просто другие) и более точно > описывающие предметную область, а физическая модель - это "последняя миля". Боюсь, это вы не понимаете, что реляционная модель - наиболее точное и полное описание предметной области. Из реляционной могут быть получены любые другие модели, тогда как обратная связь в принципе не однозначна. > Не понимает что в качестве хранилища для одной предметной области может выступать что-либо другое > кроме СУБД Вы решили убить своими знаниями? Расскажите скорее, что такое "хранилище для предметной области". Очень интересно. Опционально: что такое "предметная область"? Приведите пример формального описания предметной области. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2010, 13:24 |
|
||
|
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
|
|||
|---|---|---|---|
|
#18+
guest_20040621Боюсь, это вы не понимаете, что реляционная модель - наиболее точное и полное описание предметной области. Из реляционной могут быть получены любые другие модели, тогда как обратная связь в принципе не однозначна. Вам уже три человека ответило что это, мягко говоря, не совсем так. guest_20040621Расскажите скорее, что такое "хранилище для предметной области". Очень интересно. Опционально: что такое "предметная область"? Приведите пример формального описания предметной области. Спискок литературы1. Фаулер. Архитектура корпоративных программных приложений 2. C# и CSLA . NET Framework. Разработка бизнес-объектов 3. Нильсен. Применение DDD и шаблонов проектирования. Проблемно-ориентированное проектирование приложений с примерами на C# и .NET 4. Эванс. Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2010, 14:19 |
|
||
|
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
|
|||
|---|---|---|---|
|
#18+
> Вам уже три человека ответило что это, мягко говоря, не совсем так. Да ну? Может, уважаемый дон таки самостоятельно приведет пример неоднозначности преобразования? Никакие более высокоуровневые модели не заменяют реляционную. В принципе. У них другие задачи. > Спискок литературы Мне не нужен список литературы. Вопрос был простым. Мне нужна формальная модель. В виде диаграммы. Или в виде структуры. В любой из предпочитаемых вами нотаций. Причем, такая, которая позволяла бы оперировать гетерогенными средами, если вы за них так боретесь, на том же уровне, что и реляционной моделью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2010, 14:39 |
|
||
|
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
|
|||
|---|---|---|---|
|
#18+
аннотация ЭвансПодход автора строится на динамичном рефакторинге модели и постоянной дистилляции знаний. Это позволяет достигнуть высокой степени гармонии между логикой предметной области и кодом программы, а также достаточной гибкости программной архитектуры для целей удобной доработки и интеграции программного обеспечения. однако... мощно задвинуто ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2010, 15:09 |
|
||
|
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
|
|||
|---|---|---|---|
|
#18+
guest_20040621Мне не нужен список литературы guest_20040621 , on-line обучение - занятие не из дешёвых... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2010, 16:29 |
|
||
|
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
|
|||
|---|---|---|---|
|
#18+
> on-line обучение - занятие не из дешёвых... Модератор: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2010, 16:35 |
|
||
|
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
|
|||
|---|---|---|---|
|
#18+
Роман Дынник, Ну как всегда guest_20040621 развел срач, а по делу ничего толком не сказал. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2010, 16:46 |
|
||
|
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
|
|||
|---|---|---|---|
|
#18+
guest_20040621 совершенно правильно всегда говорит, просто более фундаментально. Я тоже при разработке пытаюсь построить правильную "модель частички мира", а не применить модную технологию. Именно реляционная модель, а не Структура данных в БД. А когда данные лежат правильно обрабатывать их можно любым способом и изменяется такая структура очень редко. Часто изменяются те структуры, где разработчик вместо понимания задачи начинает применять технологии их решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2010, 09:18 |
|
||
|
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
|
|||
|---|---|---|---|
|
#18+
andy.sТаким образом, вопрос мой связан с сопоставлением классам приложения таблиц БД (не очень оригинальная проблема, но всё же...). Нет здесь никакой проблемы. Либо вы работаете с таблицами БД и забываете про классы, либо вы работаете с классами и забываете про таблицы. Во втором случае должен быть автомат маппинга классов на БД (любую). Оба подхода имеют право на существование, но первый - универсальный, второй годится только для определенного класса систем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2010, 09:38 |
|
||
|
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
|
|||
|---|---|---|---|
|
#18+
ENO, О технологиях в теме речь не шла. Автор задал вопрос о паттернах, 2 из 3-х которые описанны Фаулером, причем применимые именно к реляционной БД и модели. Стремление к правильной "модели частички мира" не обязывает использовать для этого ER-диаграмму. Более того, часто если сделать реверс-инжиниринг из существующей большой системы/БД, только лишь по ER-диаграмме часто бывает сложно эту "модель мира" понять, потому что структура этой БД оптимизирована под OLTP или OLAP и оптимизирована по производительности. Она может быть слишком нормализованной или наоборот денормализованной, и полученная модель уже не будет отражать "картину мира". Еще со времен появления ErWin-а в case-средствах существовало 2-е модели - логическая, которая могла отражать более четко предметную область и физическая (ER), которая отражала более четко как данные уложены в таблицах. Если проектировать, например, в PowerDesigner, то предметная область может быть отражена с помощью концептуальной модели, аналитической модели (UML-нотация) или диаграммы классов(UML-нотация). А из них уже может быть автоматически получена физическая ER-модель, которая дорабатывается под конкретную СУБД с учетом нефункциональных требований по производительности. Аналитику чаще удобнее использовать концептуальную модель, аналитическую модель или диаграмму классов. И в принципе, он даже не обязан знать о физической модели, а иногда и не иметь возможность что-либо в ней менять, потому что работа/оптимизация физической модели - дело разработчика БД. Проектирование информационной системы может идти как сверху вниз, так и снизу вверх. Поэтому разработчик может получить из физической модели диаграмму классов и доработать ее чтобы она лучше отражала предметную область. В Data-aware системах, в таких, где не требуется разветвленной бизнес-логики, где вполне хватает работы на уровне приложения через dataset/recordset-ы вполне может быть достаточно физической ER-модели для понимания всего и вся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2010, 10:04 |
|
||
|
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
|
|||
|---|---|---|---|
|
#18+
Роман Дынник, Все правильно) Но ТС прочитав книгу про паттернах спрашивает совета какой применять совершенно не представляя самой задачи. И мы её не знаем. Поэтому получил ответ разобраться сначала в задаче и решение потом само придёт. А то получается сначала всю архитектуру разработаю с помощью форума, а потом уж начну в предметной области разбираться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2010, 10:26 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36988106&tid=1542424]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
152ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 417ms |

| 0 / 0 |
