powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Паттерны проектирования баз данных
25 сообщений из 44, страница 1 из 2
Паттерны проектирования баз данных
    #32986146
korav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Откуда подчерпнуть информацию о паттернах проектирования БД?

Нигде в рунете ничего систематизированного не нашел. Под паттерном проектирования я понимаю нечто вот такое - в данном случае проецирование древовидной структуры в плоскую таблицу. Видел где-то перевод этой статьи на русский, но ссылку уже найти не могу.
Тема очень интересная, многие ничего подобного в глаза не видели, в частности, один мой знакомый сделал большие глаза, когда он промучалася над написанием и оптимизацией хранимой процедуры под MsSQL для выборки всех деталей по агрегату, а при данном способе проектирования таблицы это можно было бы сделать одним изящным SQL запросом.
...
Рейтинг: 0 / 0
Паттерны проектирования баз данных
    #32986160
korav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот, только увидел, в соседнем топике краем коснулись этой проблемы, но в другой плоскости. Так что идея витает в воздухе, постепенно оформляясь ;)
...
Рейтинг: 0 / 0
Паттерны проектирования баз данных
    #32986926
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Идея представления дерева в виде вложенных множеств хороша только в тех случаях когда из дерева нужно часто делать выборки и редко обновления.
Причем очень редко. :)
...
Рейтинг: 0 / 0
Паттерны проектирования баз данных
    #32987044
korav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спокойно. Не скатываемся в флейм по поводу данного конкретного решения. Используя данное решение как основную идею, я в свое время написал системы управления контентом сайта и в справочную систему.

Это только пример как паттерн может выглядеть. Это типовое решение, оно имеет свои недостатки и достоинства, область применения. Просмотрите книгу GoF по паттернам проектирования для ООП. Там все так по каждому паттерну и расписано: идея, в схематичном виде, область применения, ее достоинства и недостатки.

Настоятельно напоминаю: вопрос не о деревьях (я начинаю жалеть, что вообще их коснулся), вопрос о паттернах проектирования баз данных.

Или никто вообще ничего не слышал о систематизированной подборке?
...
Рейтинг: 0 / 0
Паттерны проектирования баз данных
    #32987061
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня в закладках есть Library of Free Data Models , но, честно говоря, самому воспользоваться пока не привелось. И скорее всего это не шаблоны, а просто набор реализаций.
...
Рейтинг: 0 / 0
Паттерны проектирования баз данных
    #32988026
Andres 1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На домашней странице Richard T. Snodgrass в PDF доступна полная версия его книги "Developing Time-Oriented Database Applications in SQL" (с примерами).
...
Рейтинг: 0 / 0
Паттерны проектирования баз данных
    #32988074
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
koravНастоятельно напоминаю: вопрос не о деревьях (я начинаю жалеть, что вообще их коснулся), вопрос о паттернах проектирования баз данных.

Или никто вообще ничего не слышал о систематизированной подборке?

Не понял почему последовало столько эмоций на мое небольшое замечание. :)
Что касается патернов для БД, то не представляю себе каими они могут быть.
Могу только предположить почему их нет. Например потому, что реляционная теория достаточно формализована, чтобы можно было проверять свои решения а не ориентироваться на народный опыт.
...
Рейтинг: 0 / 0
Паттерны проектирования баз данных
    #32988285
korav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Genady
Не понял почему последовало столько эмоций на мое небольшое замечание. :)
Что касается патернов для БД, то не представляю себе каими они могут быть.
Могу только предположить почему их нет. Например потому, что реляционная теория достаточно формализована, чтобы можно было проверять свои решения а не ориентироваться на народный опыт.

Прошу прошения за эмоции, хотелось не увлекаться дискуссией по поводу нужны шаблоны или нет. Но, видимо, не удалось ;).

Какими могут быть паттерны я вроде бы показал. Есть типовая задача - разместить древовидную структуру данных в плоской таблице. Есть неплохое решение, которое можно считать типовым. Кстати вставка-удаление в данную структуру тоже достаточно проста - если я правильно помню (я дела эти системы три года назад) после вставки-удаления узла происходит модификация одним update запросом.Человек, который не знает этого типового решения, городит примерно такое безобразие в виде сохранения в текстовом поле id предков записи разделенных точками. И синтаксический разбор этих полей при посторении дерева. А уж о трудоемкости вставки-удаления я не говорю вообще. Какое отношение ТАКОЕ решение имеет к степени формализации реляционной теории?

Denis Popov
У меня в закладках есть Library of Free Data Models, но, честно говоря, самому воспользоваться пока не привелось. И скорее всего это не шаблоны, а просто набор реализаций.
Да, это примеры реализаций. Я даже диаграмку игры Shrek2 нашел.


Andres 1
На домашней странице Richard T. Snodgrass в PDF доступна полная версия его книги "Developing Time-Oriented Database Applications in SQL" (с примерами).

Спасибо за ссылку, скачаю, посмотрю.
...
Рейтинг: 0 / 0
Паттерны проектирования баз данных
    #32988350
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
koravКакими могут быть паттерны я вроде бы показал. Есть типовая задача - разместить древовидную структуру данных в плоской таблице. Есть неплохое решение, которое можно считать типовым. Кстати вставка-удаление в данную структуру тоже достаточно проста - если я правильно помню (я дела эти системы три года назад) после вставки-удаления узла происходит модификация одним update запросом.

Не совсем так Вот здесь например перевод статьи обратите внимание на процедуры модификации, просто множества приходится постоянно перетряхивать при модификациях.

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

Ну и я бы не назвал деревянную задачу типовой для реляциолнных БД. :)
...
Рейтинг: 0 / 0
Паттерны проектирования баз данных
    #32994331
korav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andres 1На домашней странице Richard T. Snodgrass в PDF доступна полная версия его книги "Developing Time-Oriented Database Applications in SQL" (с примерами).

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

Искал в сети эту книгу , она, как мне кажется, наиболее интересна в данном контексте, но ее, похоже, нет нигде в электронном виде. Нашел книгу того же John Celko по деревьям и иерархическим структурам, но это не совсем то, что нужно.

Genady
Не совсем так Вот здесь например перевод статьи обратите внимание на процедуры модификации, просто множества приходится постоянно перетряхивать при модификациях.

Вот и перевод статьи нашелся. Большое Спасибо!
На самом деле там все не так сложно - самый большой и сложный код в статье, это код сжатия разрежений в значениях id левых и правых сторон записей при удалении поддеревьев/узлов. Я вообще этим не занимался. Жизнь разработчика сильно упрощает условие, что одновременно добавляется/удаляется только один узел дерева. Тогда процедура вставки/удаления влечет за собой только модификацию левосторонних и правостороних id путем увеличения/уменьшения их на 1. Это делается одним update запросом. Максимиум что ему может понадобитться сделать это инкрементировать/декрементировать во всех записях таблицы (это случай удаления самого правого листа дерева) значения двух целочисленных полей.
IMHO сжатие разрежений нужно только для сохранения читабельности таблицы, на работе оно никак не отражатеся.
...
Рейтинг: 0 / 0
Паттерны проектирования баз данных
    #32994504
Andres 1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
korav
Посмотрел книгу. Больше похожа на учебник SQL с уклоном на манипуляцию данными о времени. Вообще прикольно, только воды много - ну зачем в книге по SQL обзорные вклейки по различным типам мировых календарей.


Ну да. И хорошо. Так и должно быть для топика "паттерны".

Я на sql.ru не очень давно, но разве не возникают регулярно вопросы типа "Помогите изменить одним запросом мою базу, чтобы была с логом версий, с учетным временем, etc etc, используя не более одного поля DATETIME на таблицу и чтобы мне не нужно было переделывать клиента"
...
Рейтинг: 0 / 0
Паттерны проектирования баз данных
    #32996090
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
korav
Вот и перевод статьи нашелся. Большое Спасибо!
На самом деле там все не так сложно - самый большой и сложный код в статье, это код сжатия разрежений в значениях id левых и правых сторон записей при удалении поддеревьев/узлов. Я вообще этим не занимался. Жизнь разработчика сильно упрощает условие, что одновременно добавляется/удаляется только один узел дерева. Тогда процедура вставки/удаления влечет за собой только модификацию левосторонних и правостороних id путем увеличения/уменьшения их на 1. Это делается одним update запросом. Максимиум что ему может понадобитться сделать это инкрементировать/декрементировать во всех записях таблицы (это случай удаления самого правого листа дерева) значения двух целочисленных полей.
IMHO сжатие разрежений нужно только для сохранения читабельности таблицы, на работе оно никак не отражатеся.

Ну что ж, хотите паттернов с иерархиями? Нате. :)
...
Рейтинг: 0 / 0
Паттерны проектирования баз данных
    #32996150
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot korav
..........
И синтаксический разбор этих полей при посторении дерева. А уж о трудоемкости вставки-удаления я не говорю вообще. Какое отношение ТАКОЕ решение имеет к степени формализации реляционной теории?
[/quot]

А чем Вам не нравится :

1. Отец
2. Сын
3. ...

Обыкновенная таблица. Универсальная, с любой глубиной.
...
Рейтинг: 0 / 0
Паттерны проектирования баз данных
    #32996963
korav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andres 1
Ну да. И хорошо. Так и должно быть для топика "паттерны".
Я на sql.ru не очень давно, но разве не возникают регулярно вопросы типа "Помогите изменить одним запросом мою базу, чтобы была с логом версий, с учетным временем, etc etc, используя не более одного поля DATETIME на таблицу и чтобы мне не нужно было переделывать клиента"
С этой точки зрения я как-то на книгу не посмотрел. Сейчас посмотрю повнимательней - все-таки книга на 500 листов, я ее "по диагонали" просмотрел, сейчас почитаю с большим интересом.

Genady
Ну что ж, хотите паттернов с иерархиями?Нате. :)

Не понравилось, давайте еще ;). Во первых, обсуждается давний прием с внутренними ссылками, во вторых, все явно заточное под SQL Server2000 и никаких попыток выработать более универсальное решение нет. Ну и хранимые процедуры там, где можно (при другом решении таблиц) в принципе обойтись чистым SQL. Что понравилось - вынести различные по связям типы деервьев над одинаковыми данными в различные таблицы. Надо будет запомнить. Все равно спасибо, это уже "горячее".

Сахават Юсифов
А чем Вам не нравится :

1. Отец
2. Сын
3. ...

Обыкновенная таблица. Универсальная, с любой глубиной.
Люди! Мне очень не охота флеймить по поводу различных представлений иерархий в плоских таблицах, я об этом уже давно думал и свои выводы сделал. Мне это уже не интересно. Я о паттернах проектирования поговорить зашел. В общем-то разговора на заданную тему пока не получается, но чтобы не давать опускаться топику в списке свежих сообщений приходится следовать интересам посетителей ;).

Основное отличие данного решения от того, что придумал Селко в том, что Селко изобрел метод преобразования иерархии во вложенные множества (nested sets). Что это дает? SQL это язык, ориентированный на работу с множествами. Технически преборазование реализовано путем введения ЦЕЛОЧИСЛЕННЫХ УНИКАЛЬНЫХ полей. Следовательно, мы можем
1) В рамках SQL получить выборку практически любой сложности, под любую типовую задачу работы с иерархиями.
2) Получить выборку быстро (если создадим индексы по данным полям).

Какие недостатки имеет приведенное Вами решение? Мы храним данные о иерархии в строковом поле. Каждый раз для построения дерева нам нужно обрабатывать строковые поля. Мы не можем использовать мощные средства SQL для работы с множествами, фактически, мы используем работу со строками, под что SQL абсолютно не затачивался (фактически при таком построении таблицы пишется хранимая процедура, занимающаяся синтакисческим анализом строки). Относительно любой глубины тоже все не совсем верно - как правило, для ускорения работы делают строку фиксированной длины, сделоватьельно, число символов в ней и уровней в иерархии ограничено. Относительно типовых задач работы с иерархиями: более-менее быстро работает только задача построения ветвей дерева. А если потребуется выбрать, скажем все узлы дерева, находящиеся на опреденном уровне?(Выбрать всех вице-президентов компании). А если потребуется выбрать, скажем, все узлы дерева, находящиеся на опреденном уровне и имеющие в подчинении определенное число листьев? (Выбрать всех вице-президентов, которым подчиняется не менее 100 работников).
...
Рейтинг: 0 / 0
Паттерны проектирования баз данных
    #32997066
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем для этого SQL, есть же иерархические и сетевые модели.
При желании (нужды) можно написать пару функций (хп) и для SQL.
Есть специальные структуры для графов вообще, GraphML,...
...
Рейтинг: 0 / 0
Паттерны проектирования баз данных
    #32997165
Programmer_Ortodox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават ЮсифовА зачем для этого SQL, есть же иерархические и сетевые модели.
При желании (нужды) можно написать пару функций (хп) и для SQL.
Есть специальные структуры для графов вообще, GraphML,...

Согласен! Ммы можем любой объект во вселенной идентифицировать, скажем BigInt, или любой элемент этого объекта,более того, можно и то и другое, одновременно!
...
Рейтинг: 0 / 0
Паттерны проектирования баз данных
    #32997215
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем рассмешил?
...
Рейтинг: 0 / 0
Паттерны проектирования баз данных
    #32997437
Int23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
korav
Нашел книгу того же John Celko по деревьям и иерархическим структурам, но это не совсем то, что нужно.


Может дашь ссылку????
...
Рейтинг: 0 / 0
Паттерны проектирования баз данных
    #32997533
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
korav
Я о паттернах проектирования поговорить зашел. В общем-то разговора на заданную тему пока не получается, но чтобы не давать опускаться топику в списке свежих сообщений приходится следовать интересам посетителей ;).


Дык объясните о каких паттернах идет речь, паттерн "склад", "библиотека" и т.п.?
Нет таких и никогда не будет.
...
Рейтинг: 0 / 0
Паттерны проектирования баз данных
    #33007746
LVU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LVU
Гость
GenadyДык объясните о каких паттернах идет речь, паттерн "склад", "библиотека" и т.п.?
Нет таких и никогда не будет.
Только что зашел, так что извините, если не в тему. По идее, имеются в виду вовсе не библиотеки и склады, а различные ситуации, которые в том или ином виде могут встречаться в самых разных предметных областях. Предлагаю составить приблизительный список тех паттернов, которые вообще имеет смысл описывать. Для начала:
Деревья (структур разных много, вплоть до двоичных деревьев с балансировкой)

Графы (надо ли? Вроде и так все довольно прозрачно. Хотя...)

Роли (имеется в виду, когда у нас есть разновидности какого-то объекта со своими доп. свойствами)

Хранение исторических данных (тоже надо ли?)

Наборы свойств, определяемые пользователем (особенно в приложении к иерархической структуре классов, там довольно весело получается)
...
Рейтинг: 0 / 0
Паттерны проектирования баз данных
    #33008745
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVU
Только что зашел, так что извините, если не в тему. По идее, имеются в виду вовсе не библиотеки и склады, а различные ситуации, которые в том или ином виде могут встречаться в самых разных предметных областях. Предлагаю составить приблизительный список тех паттернов, которые вообще имеет смысл описывать. Для начала:
Деревья (структур разных много, вплоть до двоичных деревьев с балансировкой)

Графы (надо ли? Вроде и так все довольно прозрачно. Хотя...)


Ага, особенно ненаправленный граф.
LVU
Роли (имеется в виду, когда у нас есть разновидности какого-то объекта со своими доп. свойствами)


Уже есть такой паттерн, называется "Супертип - подтип". :)
LVU
Хранение исторических данных (тоже надо ли?)


Просто так хранить историю смысла не вижу, а если есть цель, то она и определяет способ хранения таких данных.
LVU
Наборы свойств, определяемые пользователем (особенно в приложении к иерархической структуре классов, там довольно весело получается)

Вот о чем здесь речь идет, честно говоря не понял.
...
Рейтинг: 0 / 0
Паттерны проектирования баз данных
    #33008952
LVU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LVU
Гость
Genady LVU Графы (надо ли? Вроде и так все довольно прозрачно. Хотя...)
Ага, особенно ненаправленный граф. Об этом я тоже подумал после того, как запостил сообщение. Но решил не дописывать.

Genady LVU Роли (имеется в виду, когда у нас есть разновидности какого-то объекта со своими доп. свойствами)

Уже есть такой паттерн, называется "Супертип - подтип". :)Для деревьев тоже паттерны готовые есть. Я говорю о том, чтобы попробовать собрать вместе инфу по ним. Или вы об ООСУБД? Так вроде здесь речь все же об РСУБД шла?

Genady LVU Хранение исторических данных (тоже надо ли?)

Просто так хранить историю смысла не вижу, а если есть цель, то она и определяет способ хранения таких данных.Согласен, там все, в общем, тривиально получается.

Genady LVU Наборы свойств, определяемые пользователем (особенно в приложении к иерархической структуре классов, там довольно весело получается)
Вот о чем здесь речь идет, честно говоря не понял.Юзер может может определять типы объектов и наборы свойств для этих типов. Потом определять сами объекты (экземпляры) и задавать значения их свойств. Веселее всего, если типы организованы иерархически и потомки должны иметь все свойства предков. Один из возможных типов данных для свойств - lookup, т.е., возможность выбора из нескольких значений. Вроде бы достаточно часто такие вещи встречаются?
...
Рейтинг: 0 / 0
Паттерны проектирования баз данных
    #33009006
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVUДля деревьев тоже паттерны готовые есть. Я говорю о том, чтобы попробовать собрать вместе инфу по ним. Или вы об ООСУБД? Так вроде здесь речь все же об РСУБД шла?
Не понял причем здесь ООСУБД, я говорил о достаточно распространенной ситуации, когда есть несколько типов сущностей, у которых есть общие атрибуты и специфичные для каждого типа. В таком случае специфичные просто выносятся в другие таблицы (подтипы) связанные с супертипом.
LVU
Юзер может может определять типы объектов и наборы свойств для этих типов. Потом определять сами объекты (экземпляры) и задавать значения их свойств. Веселее всего, если типы организованы иерархически и потомки должны иметь все свойства предков. Один из возможных типов данных для свойств - lookup, т.е., возможность выбора из нескольких значений. Вроде бы достаточно часто такие вещи встречаются?

Не могу себе представить задачу, в которой понадобились бы подобные возможности.
...
Рейтинг: 0 / 0
Паттерны проектирования баз данных
    #33009093
LVU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LVU
Гость
GenadyНе понял причем здесь ООСУБД, я говорил о достаточно распространенной ситуации, когда есть несколько типов сущностей, у которых есть общие атрибуты и специфичные для каждого типа. В таком случае специфичные просто выносятся в другие таблицы (подтипы) связанные с супертипом.Так чем не паттерн? Тем более, здесь есть несколько неочевидных моментов, связанных с обеспечением целостности.

Genady LVUЮзер может может определять типы объектов и наборы свойств для этих типов. Потом определять сами объекты (экземпляры) и задавать значения их свойств. Веселее всего, если типы организованы иерархически и потомки должны иметь все свойства предков. Один из возможных типов данных для свойств - lookup, т.е., возможность выбора из нескольких значений. Вроде бы достаточно часто такие вещи встречаются?Не могу себе представить задачу, в которой понадобились бы подобные возможности.Из недавнего: у предприятия есть куча договоров (тысячи), но разных типов договоров немного - десятки. Для каждого типа держим шаблон в rtf. У разных типов могут быть разные "переменные куски", часть из них стандартные, вроде имени директора и банковских реквизитов, часть - нестандартные, определяемые пользователем. У каждого такого реквизита (и стандартного, и нестандартного) есть "макрос" - то, что пишется в шаблоне и при генерации текста конкретного договора заменяется значением. Это не единственный пример, просто тут достаточно ярко вроде.
...
Рейтинг: 0 / 0
Паттерны проектирования баз данных
    #33009115
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVUТак чем не паттерн? Тем более, здесь есть несколько неочевидных моментов, связанных с обеспечением целостности.
Не вижу никаких неочевидных моментов, на всякий случай уточно, что PK поддипов наследуется от супертипа, т.е. РК и FK один и тот же атрибут.

LVUИз недавнего: у предприятия есть куча договоров (тысячи), но разных типов договоров немного - десятки. Для каждого типа держим шаблон в rtf. У разных типов могут быть разные "переменные куски", часть из них стандартные, вроде имени директора и банковских реквизитов, часть - нестандартные, определяемые пользователем. У каждого такого реквизита (и стандартного, и нестандартного) есть "макрос" - то, что пишется в шаблоне и при генерации текста конкретного договора заменяется значением. Это не единственный пример, просто тут достаточно ярко вроде.

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


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