|
|
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Откуда подчерпнуть информацию о паттернах проектирования БД? Нигде в рунете ничего систематизированного не нашел. Под паттерном проектирования я понимаю нечто вот такое - в данном случае проецирование древовидной структуры в плоскую таблицу. Видел где-то перевод этой статьи на русский, но ссылку уже найти не могу. Тема очень интересная, многие ничего подобного в глаза не видели, в частности, один мой знакомый сделал большие глаза, когда он промучалася над написанием и оптимизацией хранимой процедуры под MsSQL для выборки всех деталей по агрегату, а при данном способе проектирования таблицы это можно было бы сделать одним изящным SQL запросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 13:36 |
|
||
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
Вот, только увидел, в соседнем топике краем коснулись этой проблемы, но в другой плоскости. Так что идея витает в воздухе, постепенно оформляясь ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 13:40 |
|
||
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
Идея представления дерева в виде вложенных множеств хороша только в тех случаях когда из дерева нужно часто делать выборки и редко обновления. Причем очень редко. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 17:25 |
|
||
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
Спокойно. Не скатываемся в флейм по поводу данного конкретного решения. Используя данное решение как основную идею, я в свое время написал системы управления контентом сайта и в справочную систему. Это только пример как паттерн может выглядеть. Это типовое решение, оно имеет свои недостатки и достоинства, область применения. Просмотрите книгу GoF по паттернам проектирования для ООП. Там все так по каждому паттерну и расписано: идея, в схематичном виде, область применения, ее достоинства и недостатки. Настоятельно напоминаю: вопрос не о деревьях (я начинаю жалеть, что вообще их коснулся), вопрос о паттернах проектирования баз данных. Или никто вообще ничего не слышал о систематизированной подборке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 18:05 |
|
||
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
У меня в закладках есть Library of Free Data Models , но, честно говоря, самому воспользоваться пока не привелось. И скорее всего это не шаблоны, а просто набор реализаций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 18:14 |
|
||
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
На домашней странице Richard T. Snodgrass в PDF доступна полная версия его книги "Developing Time-Oriented Database Applications in SQL" (с примерами). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2005, 11:04 |
|
||
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
koravНастоятельно напоминаю: вопрос не о деревьях (я начинаю жалеть, что вообще их коснулся), вопрос о паттернах проектирования баз данных. Или никто вообще ничего не слышал о систематизированной подборке? Не понял почему последовало столько эмоций на мое небольшое замечание. :) Что касается патернов для БД, то не представляю себе каими они могут быть. Могу только предположить почему их нет. Например потому, что реляционная теория достаточно формализована, чтобы можно было проверять свои решения а не ориентироваться на народный опыт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2005, 11:24 |
|
||
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
Genady Не понял почему последовало столько эмоций на мое небольшое замечание. :) Что касается патернов для БД, то не представляю себе каими они могут быть. Могу только предположить почему их нет. Например потому, что реляционная теория достаточно формализована, чтобы можно было проверять свои решения а не ориентироваться на народный опыт. Прошу прошения за эмоции, хотелось не увлекаться дискуссией по поводу нужны шаблоны или нет. Но, видимо, не удалось ;). Какими могут быть паттерны я вроде бы показал. Есть типовая задача - разместить древовидную структуру данных в плоской таблице. Есть неплохое решение, которое можно считать типовым. Кстати вставка-удаление в данную структуру тоже достаточно проста - если я правильно помню (я дела эти системы три года назад) после вставки-удаления узла происходит модификация одним update запросом.Человек, который не знает этого типового решения, городит примерно такое безобразие в виде сохранения в текстовом поле id предков записи разделенных точками. И синтаксический разбор этих полей при посторении дерева. А уж о трудоемкости вставки-удаления я не говорю вообще. Какое отношение ТАКОЕ решение имеет к степени формализации реляционной теории? Denis Popov У меня в закладках есть Library of Free Data Models, но, честно говоря, самому воспользоваться пока не привелось. И скорее всего это не шаблоны, а просто набор реализаций. Да, это примеры реализаций. Я даже диаграмку игры Shrek2 нашел. Andres 1 На домашней странице Richard T. Snodgrass в PDF доступна полная версия его книги "Developing Time-Oriented Database Applications in SQL" (с примерами). Спасибо за ссылку, скачаю, посмотрю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2005, 12:34 |
|
||
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
koravКакими могут быть паттерны я вроде бы показал. Есть типовая задача - разместить древовидную структуру данных в плоской таблице. Есть неплохое решение, которое можно считать типовым. Кстати вставка-удаление в данную структуру тоже достаточно проста - если я правильно помню (я дела эти системы три года назад) после вставки-удаления узла происходит модификация одним update запросом. Не совсем так Вот здесь например перевод статьи обратите внимание на процедуры модификации, просто множества приходится постоянно перетряхивать при модификациях. У меня стояла задача работы с деревом, причем на нем должны были активно проводиться Выборки и модификация самого дерева, т.е. узлы в нем могли перемещаться и/или удаляться в том числе на любом уровне дерева, я прикинул насколько загрузиться сервер и отказался от этой модели. Ну и я бы не назвал деревянную задачу типовой для реляциолнных БД. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2005, 12:53 |
|
||
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
Andres 1На домашней странице Richard T. Snodgrass в PDF доступна полная версия его книги "Developing Time-Oriented Database Applications in SQL" (с примерами). Посмотрел книгу. Больше похожа на учебник SQL с уклоном на манипуляцию данными о времени. Вообще прикольно, только воды много - ну зачем в книге по SQL обзорные вклейки по различным типам мировых календарей. Искал в сети эту книгу , она, как мне кажется, наиболее интересна в данном контексте, но ее, похоже, нет нигде в электронном виде. Нашел книгу того же John Celko по деревьям и иерархическим структурам, но это не совсем то, что нужно. Genady Не совсем так Вот здесь например перевод статьи обратите внимание на процедуры модификации, просто множества приходится постоянно перетряхивать при модификациях. Вот и перевод статьи нашелся. Большое Спасибо! На самом деле там все не так сложно - самый большой и сложный код в статье, это код сжатия разрежений в значениях id левых и правых сторон записей при удалении поддеревьев/узлов. Я вообще этим не занимался. Жизнь разработчика сильно упрощает условие, что одновременно добавляется/удаляется только один узел дерева. Тогда процедура вставки/удаления влечет за собой только модификацию левосторонних и правостороних id путем увеличения/уменьшения их на 1. Это делается одним update запросом. Максимиум что ему может понадобитться сделать это инкрементировать/декрементировать во всех записях таблицы (это случай удаления самого правого листа дерева) значения двух целочисленных полей. IMHO сжатие разрежений нужно только для сохранения читабельности таблицы, на работе оно никак не отражатеся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2005, 19:44 |
|
||
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
korav Посмотрел книгу. Больше похожа на учебник SQL с уклоном на манипуляцию данными о времени. Вообще прикольно, только воды много - ну зачем в книге по SQL обзорные вклейки по различным типам мировых календарей. Ну да. И хорошо. Так и должно быть для топика "паттерны". Я на sql.ru не очень давно, но разве не возникают регулярно вопросы типа "Помогите изменить одним запросом мою базу, чтобы была с логом версий, с учетным временем, etc etc, используя не более одного поля DATETIME на таблицу и чтобы мне не нужно было переделывать клиента" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2005, 00:45 |
|
||
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
korav Вот и перевод статьи нашелся. Большое Спасибо! На самом деле там все не так сложно - самый большой и сложный код в статье, это код сжатия разрежений в значениях id левых и правых сторон записей при удалении поддеревьев/узлов. Я вообще этим не занимался. Жизнь разработчика сильно упрощает условие, что одновременно добавляется/удаляется только один узел дерева. Тогда процедура вставки/удаления влечет за собой только модификацию левосторонних и правостороних id путем увеличения/уменьшения их на 1. Это делается одним update запросом. Максимиум что ему может понадобитться сделать это инкрементировать/декрементировать во всех записях таблицы (это случай удаления самого правого листа дерева) значения двух целочисленных полей. IMHO сжатие разрежений нужно только для сохранения читабельности таблицы, на работе оно никак не отражатеся. Ну что ж, хотите паттернов с иерархиями? Нате. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2005, 12:30 |
|
||
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
[quot korav .......... И синтаксический разбор этих полей при посторении дерева. А уж о трудоемкости вставки-удаления я не говорю вообще. Какое отношение ТАКОЕ решение имеет к степени формализации реляционной теории? [/quot] А чем Вам не нравится : 1. Отец 2. Сын 3. ... Обыкновенная таблица. Универсальная, с любой глубиной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2005, 12:54 |
|
||
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
Andres 1 Ну да. И хорошо. Так и должно быть для топика "паттерны". Я на sql.ru не очень давно, но разве не возникают регулярно вопросы типа "Помогите изменить одним запросом мою базу, чтобы была с логом версий, с учетным временем, etc etc, используя не более одного поля DATETIME на таблицу и чтобы мне не нужно было переделывать клиента" С этой точки зрения я как-то на книгу не посмотрел. Сейчас посмотрю повнимательней - все-таки книга на 500 листов, я ее "по диагонали" просмотрел, сейчас почитаю с большим интересом. Genady Ну что ж, хотите паттернов с иерархиями?Нате. :) Не понравилось, давайте еще ;). Во первых, обсуждается давний прием с внутренними ссылками, во вторых, все явно заточное под SQL Server2000 и никаких попыток выработать более универсальное решение нет. Ну и хранимые процедуры там, где можно (при другом решении таблиц) в принципе обойтись чистым SQL. Что понравилось - вынести различные по связям типы деервьев над одинаковыми данными в различные таблицы. Надо будет запомнить. Все равно спасибо, это уже "горячее". Сахават Юсифов А чем Вам не нравится : 1. Отец 2. Сын 3. ... Обыкновенная таблица. Универсальная, с любой глубиной. Люди! Мне очень не охота флеймить по поводу различных представлений иерархий в плоских таблицах, я об этом уже давно думал и свои выводы сделал. Мне это уже не интересно. Я о паттернах проектирования поговорить зашел. В общем-то разговора на заданную тему пока не получается, но чтобы не давать опускаться топику в списке свежих сообщений приходится следовать интересам посетителей ;). Основное отличие данного решения от того, что придумал Селко в том, что Селко изобрел метод преобразования иерархии во вложенные множества (nested sets). Что это дает? SQL это язык, ориентированный на работу с множествами. Технически преборазование реализовано путем введения ЦЕЛОЧИСЛЕННЫХ УНИКАЛЬНЫХ полей. Следовательно, мы можем 1) В рамках SQL получить выборку практически любой сложности, под любую типовую задачу работы с иерархиями. 2) Получить выборку быстро (если создадим индексы по данным полям). Какие недостатки имеет приведенное Вами решение? Мы храним данные о иерархии в строковом поле. Каждый раз для построения дерева нам нужно обрабатывать строковые поля. Мы не можем использовать мощные средства SQL для работы с множествами, фактически, мы используем работу со строками, под что SQL абсолютно не затачивался (фактически при таком построении таблицы пишется хранимая процедура, занимающаяся синтакисческим анализом строки). Относительно любой глубины тоже все не совсем верно - как правило, для ускорения работы делают строку фиксированной длины, сделоватьельно, число символов в ней и уровней в иерархии ограничено. Относительно типовых задач работы с иерархиями: более-менее быстро работает только задача построения ветвей дерева. А если потребуется выбрать, скажем все узлы дерева, находящиеся на опреденном уровне?(Выбрать всех вице-президентов компании). А если потребуется выбрать, скажем, все узлы дерева, находящиеся на опреденном уровне и имеющие в подчинении определенное число листьев? (Выбрать всех вице-президентов, которым подчиняется не менее 100 работников). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2005, 20:04 |
|
||
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
А зачем для этого SQL, есть же иерархические и сетевые модели. При желании (нужды) можно написать пару функций (хп) и для SQL. Есть специальные структуры для графов вообще, GraphML,... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2005, 22:32 |
|
||
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
Сахават ЮсифовА зачем для этого SQL, есть же иерархические и сетевые модели. При желании (нужды) можно написать пару функций (хп) и для SQL. Есть специальные структуры для графов вообще, GraphML,... Согласен! Ммы можем любой объект во вселенной идентифицировать, скажем BigInt, или любой элемент этого объекта,более того, можно и то и другое, одновременно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2005, 06:06 |
|
||
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
Чем рассмешил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2005, 08:17 |
|
||
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
korav Нашел книгу того же John Celko по деревьям и иерархическим структурам, но это не совсем то, что нужно. Может дашь ссылку???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2005, 10:07 |
|
||
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
korav Я о паттернах проектирования поговорить зашел. В общем-то разговора на заданную тему пока не получается, но чтобы не давать опускаться топику в списке свежих сообщений приходится следовать интересам посетителей ;). Дык объясните о каких паттернах идет речь, паттерн "склад", "библиотека" и т.п.? Нет таких и никогда не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2005, 10:39 |
|
||
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
GenadyДык объясните о каких паттернах идет речь, паттерн "склад", "библиотека" и т.п.? Нет таких и никогда не будет. Только что зашел, так что извините, если не в тему. По идее, имеются в виду вовсе не библиотеки и склады, а различные ситуации, которые в том или ином виде могут встречаться в самых разных предметных областях. Предлагаю составить приблизительный список тех паттернов, которые вообще имеет смысл описывать. Для начала: Деревья (структур разных много, вплоть до двоичных деревьев с балансировкой) Графы (надо ли? Вроде и так все довольно прозрачно. Хотя...) Роли (имеется в виду, когда у нас есть разновидности какого-то объекта со своими доп. свойствами) Хранение исторических данных (тоже надо ли?) Наборы свойств, определяемые пользователем (особенно в приложении к иерархической структуре классов, там довольно весело получается) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2005, 11:43 |
|
||
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
LVU Только что зашел, так что извините, если не в тему. По идее, имеются в виду вовсе не библиотеки и склады, а различные ситуации, которые в том или ином виде могут встречаться в самых разных предметных областях. Предлагаю составить приблизительный список тех паттернов, которые вообще имеет смысл описывать. Для начала: Деревья (структур разных много, вплоть до двоичных деревьев с балансировкой) Графы (надо ли? Вроде и так все довольно прозрачно. Хотя...) Ага, особенно ненаправленный граф. LVU Роли (имеется в виду, когда у нас есть разновидности какого-то объекта со своими доп. свойствами) Уже есть такой паттерн, называется "Супертип - подтип". :) LVU Хранение исторических данных (тоже надо ли?) Просто так хранить историю смысла не вижу, а если есть цель, то она и определяет способ хранения таких данных. LVU Наборы свойств, определяемые пользователем (особенно в приложении к иерархической структуре классов, там довольно весело получается) Вот о чем здесь речь идет, честно говоря не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2005, 16:05 |
|
||
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
Genady LVU Графы (надо ли? Вроде и так все довольно прозрачно. Хотя...) Ага, особенно ненаправленный граф. Об этом я тоже подумал после того, как запостил сообщение. Но решил не дописывать. Genady LVU Роли (имеется в виду, когда у нас есть разновидности какого-то объекта со своими доп. свойствами) Уже есть такой паттерн, называется "Супертип - подтип". :)Для деревьев тоже паттерны готовые есть. Я говорю о том, чтобы попробовать собрать вместе инфу по ним. Или вы об ООСУБД? Так вроде здесь речь все же об РСУБД шла? Genady LVU Хранение исторических данных (тоже надо ли?) Просто так хранить историю смысла не вижу, а если есть цель, то она и определяет способ хранения таких данных.Согласен, там все, в общем, тривиально получается. Genady LVU Наборы свойств, определяемые пользователем (особенно в приложении к иерархической структуре классов, там довольно весело получается) Вот о чем здесь речь идет, честно говоря не понял.Юзер может может определять типы объектов и наборы свойств для этих типов. Потом определять сами объекты (экземпляры) и задавать значения их свойств. Веселее всего, если типы организованы иерархически и потомки должны иметь все свойства предков. Один из возможных типов данных для свойств - lookup, т.е., возможность выбора из нескольких значений. Вроде бы достаточно часто такие вещи встречаются? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2005, 17:12 |
|
||
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
LVUДля деревьев тоже паттерны готовые есть. Я говорю о том, чтобы попробовать собрать вместе инфу по ним. Или вы об ООСУБД? Так вроде здесь речь все же об РСУБД шла? Не понял причем здесь ООСУБД, я говорил о достаточно распространенной ситуации, когда есть несколько типов сущностей, у которых есть общие атрибуты и специфичные для каждого типа. В таком случае специфичные просто выносятся в другие таблицы (подтипы) связанные с супертипом. LVU Юзер может может определять типы объектов и наборы свойств для этих типов. Потом определять сами объекты (экземпляры) и задавать значения их свойств. Веселее всего, если типы организованы иерархически и потомки должны иметь все свойства предков. Один из возможных типов данных для свойств - lookup, т.е., возможность выбора из нескольких значений. Вроде бы достаточно часто такие вещи встречаются? Не могу себе представить задачу, в которой понадобились бы подобные возможности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2005, 17:34 |
|
||
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
GenadyНе понял причем здесь ООСУБД, я говорил о достаточно распространенной ситуации, когда есть несколько типов сущностей, у которых есть общие атрибуты и специфичные для каждого типа. В таком случае специфичные просто выносятся в другие таблицы (подтипы) связанные с супертипом.Так чем не паттерн? Тем более, здесь есть несколько неочевидных моментов, связанных с обеспечением целостности. Genady LVUЮзер может может определять типы объектов и наборы свойств для этих типов. Потом определять сами объекты (экземпляры) и задавать значения их свойств. Веселее всего, если типы организованы иерархически и потомки должны иметь все свойства предков. Один из возможных типов данных для свойств - lookup, т.е., возможность выбора из нескольких значений. Вроде бы достаточно часто такие вещи встречаются?Не могу себе представить задачу, в которой понадобились бы подобные возможности.Из недавнего: у предприятия есть куча договоров (тысячи), но разных типов договоров немного - десятки. Для каждого типа держим шаблон в rtf. У разных типов могут быть разные "переменные куски", часть из них стандартные, вроде имени директора и банковских реквизитов, часть - нестандартные, определяемые пользователем. У каждого такого реквизита (и стандартного, и нестандартного) есть "макрос" - то, что пишется в шаблоне и при генерации текста конкретного договора заменяется значением. Это не единственный пример, просто тут достаточно ярко вроде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2005, 17:57 |
|
||
|
Паттерны проектирования баз данных
|
|||
|---|---|---|---|
|
#18+
LVUТак чем не паттерн? Тем более, здесь есть несколько неочевидных моментов, связанных с обеспечением целостности. Не вижу никаких неочевидных моментов, на всякий случай уточно, что PK поддипов наследуется от супертипа, т.е. РК и FK один и тот же атрибут. LVUИз недавнего: у предприятия есть куча договоров (тысячи), но разных типов договоров немного - десятки. Для каждого типа держим шаблон в rtf. У разных типов могут быть разные "переменные куски", часть из них стандартные, вроде имени директора и банковских реквизитов, часть - нестандартные, определяемые пользователем. У каждого такого реквизита (и стандартного, и нестандартного) есть "макрос" - то, что пишется в шаблоне и при генерации текста конкретного договора заменяется значением. Это не единственный пример, просто тут достаточно ярко вроде. Из этого примера я не вижу необходимости давать возможности юзерам определять типы объектов и набор их атрибутов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2005, 18:06 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=32997215&tid=1543624]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
176ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 494ms |

| 0 / 0 |
