powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
25 сообщений из 28, страница 1 из 2
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36982233
andy.s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем здрасте. Прошу не судить строго, это моё первое сообщение на форуме :)
Сразу хочу сказать, что для понимания моего вопроса нужно знать, что такое 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. Прошу простить за некую сумбурность мыслей, но у меня сейчас самые что ни на есть творческие муки, и я пытаюсь найти правильное решение (хотя и допускаю, что в данном вопросе единственно правильного может и не существовать) :)
...
Рейтинг: 0 / 0
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36982302
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забудьте о паттернах и прочей публицистике и сразу все упростится. Особенно муки творчества.
...
Рейтинг: 0 / 0
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36982307
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы, andy.s, фигней занимаетесь. На самом деле задача формулируется просто (поищите, здесь обсуждалось раз сто). Есть реляционная модель. Как данность. В силу того, что реализация предполагается средствами реляционной СУБД. Вопрос: какая метамодель (или метаметамодель) и как должна быть построена, чтобы... (здесь формулирование конкретной задачи).

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

> я хочу сделать единую таблицу товаров, содержащую общие поля (код товара, название, описание, цена)

В простом предложении вы умудрились сделать три ошибки. Абстрактного кода товара не бывает. Либо это внешний идентификатор, несущий некоторую смысловую нагрузку, либо суррогатная сущность, не несущая оной. В последнем случае говорить о коде бессмысленно. Описание чего бы то ни было контекстно зависимо. Цена также имеет функциональные зависимости.

> Автомобили могут быть легковые и грузовые.

Асфальтоукладчик вы к какой категории отнесете? А подъемный кран? А боевую машину пехоты?

> я совмещаю сразу два паттерна

Не читайте тупых книжек тупых авторов. Не пользуйтесь тупой терминологией, которую вы нашли у этих авторов. Читайте Дейта. У него есть все, что нужно.

> путём скрупулезного аналеза предметной области

Первая задача, которую должен решить начинающий архитектор баз данных - формальное описание предметной области. Как только решите - все остальные задачи будет решать очень просто.
...
Рейтинг: 0 / 0
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36982365
andy.s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621 ,
Не надо привязываться к конкретной базе, терминологии, автору. Также я не пытаюсь сделать универсальную базу. Наоборот, я не хочу пользоваться такими вещами, как EAV, когда существуют альтернативные пути. Если в приложении есть иерархия классов, то кто-то создает одну большую таблицу с сотней полей, кто-то для каждого класса создает отдельную таблицу, кто-то пихает все атрибуты в одно поле таблицы. Вопрос в том, будет ли иметь смысл комбинирование этих подходов.

В любом случае для каждого выбранного варианта мне в своем приложении придется писать программный код для сохранения объектов в реляционной бд и получения их обратно. Так почему бы не предусмотреть ситуацию, когда эти подходы могут использоваться совместно?
...
Рейтинг: 0 / 0
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36982370
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Вопрос в том, будет ли иметь смысл комбинирование этих подходов.

Ответ: структура данных первична. А как и на чем пишется приложение - абсолютно фиолетово.
...
Рейтинг: 0 / 0
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36984527
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно ли сосуществование сразу нескольких паттернов при проектировании, скажем, каталога товаров? Я знаю, что невозможного нет, но будет ли это разумным решением и не приведет ли к излишней запутанности БД?

Возможно.
Структура данных в БД НЕ первична , более того, она изменяема и также подвергается рефакторингу на каждом цикле разработки.
Первична доменная модель данных (если конечно приложение не является 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/ и помните о паттернах, это помогает людям лучше друг друга понимать. )
...
Рейтинг: 0 / 0
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36984615
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Структура данных в БД НЕ первична

Речь не об итеративности разработки, а о самодостаточности структуры данных. Она именно самодостаточна. Удивлен, что модератор раздела "проектирование" этого не понимает.
...
Рейтинг: 0 / 0
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36984776
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621Речь не об итеративности разработки, а о самодостаточности структуры данных. Она именно самодостаточна. Удивлен, что модератор раздела "проектирование" этого не понимает.
Модель может быть самодостаточной, но не на физическом уровне БД, а на аналитическом, на уровне слоя доменных объектов.
А на физическом уровне БД может быть даже и вовсе не реляционная.
Если на физическом уровне структура данных постоянна, тяжело изменяемая, то это та же монолитная, сильно связанная архитектура, что никак не может быть хорошо.
...
Рейтинг: 0 / 0
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36984805
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, просто моделей то много. Концептуальная важна, а маппинг на модель хранения и т.д. вторично.
...
Рейтинг: 0 / 0
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36984814
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Модель может быть самодостаточной

Не "может быть", а "должна быть". В противном случае это кривая поделка обкуренных китайских первоклассников.

> но не на физическом уровне БД, а на аналитическом, на уровне слоя доменных объектов

Откуда вдруг в реляционной СУБД взялись объекты?

> Если на физическом уровне структура данных постоянна, тяжело изменяемая, то это та же монолитная,
> сильно связанная архитектура, что никак не может быть хорошо

Вот только не надо валить все в кучу. Эволюция структуры данных - это одна тема, кривая поделка - совершенно другая. Нормальная структура и должна проектироваться с пониманием последовательности и характера изменений. Неизменным может оставаться базовый функционал - мультиязычность или ограничение доступа. Даже не история. Все остальное подвержено эволюции совершенно естественным образом.
...
Рейтинг: 0 / 0
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36985223
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosНу, просто моделей то много. Концептуальная важна, а маппинг на модель хранения и т.д. вторично.
Человек не понимает, что кроме физической модели есть более высокоуровневые(или просто другие) и более точно описывающие предметную область, а физическая модель - это "последняя миля".
Не понимает что в качестве хранилища для одной предметной области может выступать что-либо другое кроме СУБД.
Не понимает что хранилищ может быть множество и что они могут быть гетерогенны.
...
Рейтинг: 0 / 0
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36985430
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36985449
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман Дынник,

Скорее он просто погорячился. Воще тут мало адекватных товарищей и я не хотел бы они рассорились.
...
Рейтинг: 0 / 0
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36985880
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Человек не понимает, что кроме физической модели есть более высокоуровневые(или просто другие) и более точно
> описывающие предметную область, а физическая модель - это "последняя миля".

Боюсь, это вы не понимаете, что реляционная модель - наиболее точное и полное описание предметной области. Из реляционной могут быть получены любые другие модели, тогда как обратная связь в принципе не однозначна.

> Не понимает что в качестве хранилища для одной предметной области может выступать что-либо другое
> кроме СУБД

Вы решили убить своими знаниями? Расскажите скорее, что такое "хранилище для предметной области". Очень интересно. Опционально: что такое "предметная область"? Приведите пример формального описания предметной области.
...
Рейтинг: 0 / 0
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36986098
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621Боюсь, это вы не понимаете, что реляционная модель - наиболее точное и полное описание предметной области. Из реляционной могут быть получены любые другие модели, тогда как обратная связь в принципе не однозначна.

Вам уже три человека ответило что это, мягко говоря, не совсем так.

guest_20040621Расскажите скорее, что такое "хранилище для предметной области". Очень интересно. Опционально: что такое "предметная область"? Приведите пример формального описания предметной области.

Спискок литературы1. Фаулер. Архитектура корпоративных программных приложений 2. C# и CSLA . NET Framework. Разработка бизнес-объектов 3. Нильсен. Применение DDD и шаблонов проектирования. Проблемно-ориентированное проектирование приложений с примерами на C# и .NET 4. Эванс. Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем
...
Рейтинг: 0 / 0
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36986183
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Вам уже три человека ответило что это, мягко говоря, не совсем так.

Да ну? Может, уважаемый дон таки самостоятельно приведет пример неоднозначности преобразования? Никакие более высокоуровневые модели не заменяют реляционную. В принципе. У них другие задачи.

> Спискок литературы

Мне не нужен список литературы. Вопрос был простым. Мне нужна формальная модель. В виде диаграммы. Или в виде структуры. В любой из предпочитаемых вами нотаций. Причем, такая, которая позволяла бы оперировать гетерогенными средами, если вы за них так боретесь, на том же уровне, что и реляционной моделью.
...
Рейтинг: 0 / 0
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36986293
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аннотация ЭвансПодход автора строится на динамичном рефакторинге модели и постоянной дистилляции знаний. Это позволяет достигнуть высокой степени гармонии между логикой предметной области и кодом программы, а также достаточной гибкости программной архитектуры для целей удобной доработки и интеграции программного обеспечения.
однако... мощно задвинуто
...
Рейтинг: 0 / 0
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36986630
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621Мне не нужен список литературы
guest_20040621 ,
on-line обучение - занятие не из дешёвых...
...
Рейтинг: 0 / 0
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36986648
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> on-line обучение - занятие не из дешёвых...
Модератор:
...
Рейтинг: 0 / 0
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36986677
Роман Дынник,

Ну как всегда guest_20040621 развел срач, а по делу ничего толком не сказал. :(
...
Рейтинг: 0 / 0
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36987828
ENO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621 совершенно правильно всегда говорит, просто более фундаментально.
Я тоже при разработке пытаюсь построить правильную "модель частички мира", а не применить модную технологию. Именно реляционная модель, а не Структура данных в БД. А когда данные лежат правильно обрабатывать их можно любым способом и изменяется такая структура очень редко. Часто изменяются те структуры, где разработчик вместо понимания задачи начинает применять технологии их решения.
...
Рейтинг: 0 / 0
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36987863
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andy.sТаким образом, вопрос мой связан с сопоставлением классам приложения таблиц БД (не очень оригинальная проблема, но всё же...).
Нет здесь никакой проблемы. Либо вы работаете с таблицами БД и забываете про классы, либо вы работаете с классами и забываете про таблицы. Во втором случае должен быть автомат маппинга классов на БД (любую). Оба подхода имеют право на существование, но первый - универсальный, второй годится только для определенного класса систем.
...
Рейтинг: 0 / 0
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36987901
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ENO,

О технологиях в теме речь не шла.
Автор задал вопрос о паттернах, 2 из 3-х которые описанны Фаулером, причем применимые именно к реляционной БД и модели.

Стремление к правильной "модели частички мира" не обязывает использовать для этого ER-диаграмму. Более того, часто если сделать реверс-инжиниринг из существующей большой системы/БД, только лишь по ER-диаграмме часто бывает сложно эту "модель мира" понять, потому что структура этой БД оптимизирована под OLTP или OLAP и оптимизирована по производительности. Она может быть слишком нормализованной или наоборот денормализованной, и полученная модель уже не будет отражать "картину мира".

Еще со времен появления ErWin-а в case-средствах существовало 2-е модели - логическая, которая могла отражать более четко предметную область и физическая (ER), которая отражала более четко как данные уложены в таблицах.

Если проектировать, например, в PowerDesigner, то предметная область может быть отражена с помощью концептуальной модели, аналитической модели (UML-нотация) или диаграммы классов(UML-нотация). А из них уже может быть автоматически получена физическая ER-модель, которая дорабатывается под конкретную СУБД с учетом нефункциональных требований по производительности.

Аналитику чаще удобнее использовать концептуальную модель, аналитическую модель или диаграмму классов. И в принципе, он даже не обязан знать о физической модели, а иногда и не иметь возможность что-либо в ней менять, потому что работа/оптимизация физической модели - дело разработчика БД.

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

В Data-aware системах, в таких, где не требуется разветвленной бизнес-логики, где вполне хватает работы на уровне приложения через dataset/recordset-ы вполне может быть достаточно физической ER-модели для понимания всего и вся.
...
Рейтинг: 0 / 0
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36987959
ENO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман Дынник,

Все правильно) Но ТС прочитав книгу про паттернах спрашивает совета какой применять совершенно не представляя самой задачи. И мы её не знаем. Поэтому получил ответ разобраться сначала в задаче и решение потом само придёт. А то получается сначала всю архитектуру разработаю с помощью форума, а потом уж начну в предметной области разбираться.
...
Рейтинг: 0 / 0
Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
    #36988106
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Модератор: guest_20040621 , научитесь, наконец, отвечать адекватно, мотивированно, обоснованно и без амбициозного апломба.
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Комбинирование различных паттернов (Table Inheritance, EAV, LOB)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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