Шаблони дизайну реляційних баз даних? [зачинено]


283

Шаблони дизайну зазвичай пов'язані з об'єктно-орієнтованим дизайном.
Чи існують шаблони проектування для створення та програмування реляційних баз даних ?
Багато проблем, безумовно, повинні мати рішення для багаторазового використання.

Приклади включають шаблони для дизайну таблиць, збережених процедур, тригерів тощо ...

Чи є в Інтернет сховищі подібних шаблонів, схожих на martinfowler.com ?


Приклади проблем, які можуть вирішити шаблони:

  • Зберігання ієрархічних даних (наприклад, одна таблиця з типом проти кількох таблиць з клавішем 1: 1 та відмінностями ...)
  • Зберігання даних із змінною структурою (наприклад, загальні стовпці проти xml проти обмеженого стовпця ...)
  • Денормалізувати дані (як це зробити з мінімальним впливом тощо)

Я претендувати на кращий Q & A тут для ієрархічного зберігання даних: stackoverflow.com/questions/4048151 / ...
orangepips

1
Згідно з нашими настановами на тему , " Деякі запитання все ще залишаються поза темою, навіть якщо вони входять до однієї з перерахованих вище категорій: ... Запитання, які пропонують нам рекомендувати або знайти книгу, інструмент, бібліотеку програмного забезпечення, підручник чи інше ресурс поза сайтом - поза темою ... "
Роберт Колумбія

@RobertColumbia запитання було на тему в 2008 році, коли його запитали ...
Sklivvz

Перегляньте цей список ресурсів дизайнерських моделей на реляційних базах даних та багатьох областях інженерії програмного забезпечення github.com/DovAmir/awesome-design-patterns
dov.amir

Відповіді:


150

У серії підписів Мартіна Фаулера є книга " Бази даних рефакторингу" . Це надає перелік методів рефакторингу баз даних. Не можу сказати, що я так багато чув список моделей баз даних.

Я також настійно рекомендую модель моделей даних Девіда К. Хея та подальше подання Карта метаданих, яка базується на першій і є набагато більш масштабною та інтригуючою. Передмова лише просвітницька.

Також чудовим місцем для пошуку деяких попередньо консервованих моделей баз даних є серія книг Лен Сілверстона «Книга ресурсів книги серії» том 1 містить загальноприйняті моделі даних (співробітники, рахунки, доставка, покупки тощо). Том 2 містить конкретні галузеві моделі даних (бухгалтерський облік, охорона здоров’я тощо), у томі 3 наведено моделі моделей даних.

Нарешті, хоча ця книга нібито про UML та моделювання об'єктів, моделювання Пітера Кода в кольорі за допомогою UML забезпечує "архетипний" процес моделювання сутності, починаючи з того, що існує 4 основні архетипи будь-якої моделі об'єкта / даних.


1
Скотт У. Амблер та Прамод Дж. Садаладж названий у книзі [Рефакторинг баз даних: еволюційний дизайн баз даних] [1], і справді дуже хороший. [1]: ambysoft.com/books/refactoringDatabases.html
Panos,

3
Щодо книги Амблера: Ні, ви не можете перелічити "вставлення стовпця" або "створення обмеження ФК" як візерунок з тієї ж причини. У книзі "Банда 4" не вказано, що цикл "для" є візерунком.
Тегірі Ненаші

Це не зразок, це рефакторинг. Як метод вилучення або перейменувати параметр. Рефакторинг та візерунки йдуть рука об руку.
Майкл Браун

Одне додати: «Шаблони аналізу» Фоулера. Схожий на речі Хей
Ніл МакГуйган

2
Том Лен Сільверстона є єдиним, який я б вважав "Шаблони дизайну". Перші 2 показують зразкові моделі даних, що було поширеним у часові рамки написання книг. Том 3, хоча насправді має декілька моделей дизайну для заданого сценарію. Наприклад, глава 4 охоплює ієрархії / агрегації / однорангові сценарії, а потім пропонує безліч конструкцій, які стосуються тих, хто має плюси та мінуси кожного.
DarrellNorton

46

Шаблони дизайну - це не тривіально багаторазові рішення.

Шаблони дизайну можуть бути використані повторно, за визначенням. Вони є моделями, які ви виявляєте в інших хороших рішеннях.

Візерунок не є тривіально використаним. Однак ви можете реалізувати свій нижній дизайн за зразком.

Реляційні дизайни включають такі речі, як:

  1. Відносини "один до багатьох" (майстер-деталь, батько-дитина) стосунки із використанням іноземного ключа.

  2. Взаємовідносини "багато до багатьох" з мостовим столом.

  3. Необов’язкові взаємовідносини один на один, керовані NULL, у колонці FK.

  4. Зірка-схема: розмір і факт, дизайн OLAP.

  5. Повністю нормалізований дизайн OLTP.

  6. Кілька індексованих пошукових стовпців у вимірі.

  7. "Таблиця пошуку", яка містить ПК, опис та значення коду, які використовуються одним або кількома додатками. Чому код? Я не знаю, але коли їх потрібно використовувати, це спосіб управління кодами.

  8. Уні-стіл. [Деякі називають це анти-зразком; це шаблон, іноді це погано, іноді добре.] Це таблиця з великою кількістю попередньо з’єднаних речей, що порушує другу та третю нормальну форму.

  9. Таблиця масиву. Це таблиця, яка порушує першу нормальну форму, маючи масив або послідовність значень у стовпцях.

  10. База даних змішаного використання. Це база даних, нормалізована для обробки транзакцій, але з великою кількістю додаткових індексів для звітування та аналізу. Це анти-шаблон - не робіть цього. Люди так чи інакше роблять, тож це все-таки закономірність.

Більшість людей, які проектують бази даних, можуть легко відгризти півдесятка "Це ще одна з таких"; це дизайнерські зразки, якими вони користуються регулярно.

І це не включає адміністративні та експлуатаційні структури використання та управління.


Деякі інші шаблони, які я бачив, - це дочірня таблиця з багатьма батьками (тобто, як глобальна примітка з типом об'єкта та об'єктивом, яка може посилатися на будь-яку іншу таблицю), або самореференційна ФК (тобто, співробітник.manager -> співробітник. ід). Також я використовував однотонну конфігураційну таблицю, яка містить багато багатьох стовпців.
r00fus

1
Чому саме база даних із змішаним використанням є антидіаграмою. Що я маю робити, якщо хочу витягнути звіти з бази даних?
оливкова

3
@lhnz: Ви не можете витягнути багато з великих звітів з транзакційного проектування баз даних - блокування для звітності сповільнять операції. Складні приєднання (виконуються знову і знову) - це ще один удар проти виконання транзакцій. Ви не можете робити обидва в одній базі даних. Щоб зробити багато великих звітів, потрібно перемістити дані в зіркові схеми. Зоряну схему оптимізовано для звітування. І переміщення даних видаляє будь-які суперечки щодо блокування.
S.Lott

Чи нормалізує схему зменшення суперечок блокування рядків, якщо ти змушує таблиці зберігати більш "згуртовані" дані? Думаю, що якби велика таблиця обслуговувала записи для двох типів наборів даних, але обидва знаходяться в одному рядку, це призведе до зайвої суперечності блокування.
CMCDragonkai

6

AskTom - це, мабуть, єдиний найкорисніший ресурс щодо найкращих практик роботи з Oracle DB. (Я зазвичай просто набираю "asktom" як перше слово запиту google на певну тему)

Я не думаю, що насправді доречно говорити про моделі дизайну з реляційними базами даних. Реляційні бази даних - це вже застосування «схеми дизайну» до проблеми (проблема полягає в тому, як «представляти, зберігати та працювати з даними, зберігаючи їх цілісність», а дизайн - реляційною моделлю). Інші схвалення (зазвичай вважаються застарілими) - це Навігаційна та Ієрархічна моделі (і я впевнений, що багато інших існують).

Сказавши це, ви можете розглянути "зберігання даних" як дещо окремий "шаблон" або підхід у дизайні бази даних. Зокрема, вам може бути цікаво прочитати про схему Зірка .


4

Після багатьох років розробки баз даних я можу сказати, що є декілька питань, на які слід відповісти, перш ніж почати:

питання:

  • Ви хочете використовувати в майбутньому іншу СУБД? Якщо так, то не використовується для спеціальних SQL-матеріалів поточної СУБД. Видаліть логіку у вашій програмі.

Не використовує:

  • пробіли в назвах таблиць та назви стовпців
  • Символи, що не належать Ascii, у назвах таблиць та стовпців
  • прив’язка до конкретного нижнього або верхнього регістру. І ніколи не використовуйте 2 таблиці чи стовпці, які відрізняються лише нижньою та великою літерами.
  • не використовує ключові слова SQL для назв таблиць або стовпців, таких як "ВІД", "МЕЖДУ", "ВИДАЛИТИ" тощо

рекомендації:

  • Використовуйте NVARCHAR або його еквіваленти для підтримки unicode, тоді у вас немає проблем із кодовими сторінками.
  • Дайте кожному стовпцю унікальну назву. Це полегшує процес приєднання, щоб вибрати стовпець. Дуже складно, якщо в кожній таблиці є стовпець "Ідентифікатор" або "Ім'я" або "Опис". Використовуйте XyzID та AbcID.
  • Використовуйте пакет ресурсів або дорівнює для складних виразів SQL. Це полегшує перехід на іншу СУБД.
  • Не вкладає жодних типів даних. Інша СУБД не може мати цей тип даних. ДЛЯ ПРИКЛАДУ Oracle Daes не має МАЛЬКОГО лише числа.

Я сподіваюся, що це хороша відправна точка.


7
Хоча ваші коментарі досить повчальні та корисні, вони не є моделями дизайну. Вони є найкращими методами. Дякую,
Sklivvz

7
Я не згоден з рекомендацією щодо унікальних назв стовпців. Я вважаю за краще, щоб customer.id розлучався, ніж казав customerid, навіть коли немає чого розізлити.
Пол Томблін,

1

Ваше запитання трохи розпливчасте, але я думаю, що UPSERTйого можна вважати дизайнерським зразком. Для мов, які не реалізуються MERGE, існує низка альтернатив для вирішення проблеми (якщо є відповідні рядки, UPDATEінакше INSERT).


UPSERT - це команда та частина мови SQL. Це не зразок.
Todd R

UPSERT - це команда в деяких варіантах мови SQL - у ряді платформ її немає або є лише нещодавно.
Стів Гомер

@ToddR - Я чув (сказав, злегка цинічно), що "візерунки" насправді є не що інше, як недоліки мови чи моделі, про які користувач повинен створити робочі місця. Я не знаю, що робить UPSERT, але, хоча він був доданий до деяких SQL, а не до інших, це шаблон.
Мартін Ф

1

Залежить від того, що ви маєте на увазі під шаблоном. Якщо ви думаєте про особу / компанію / транзакцію / продукт та інше, то так - існує багато загальних схем баз даних.

Якщо ви думаєте про Factory, Singleton ... тоді ні - вам це не потрібно, оскільки вони занадто низькі для програмування БД.

Якщо ви думаєте, як називати об'єкти бази даних, то це під категорією умовних умов, а не дизайн сам по собі.

BTW, S.Lott, відносини «один до багатьох» і «багато-до-багатьох» не є «зразками». Вони є основними складовими реляційної моделі.


а як щодо спадкування бази даних на кшталт (людина, клієнт, працівник), можливо, таку річ можна розглядати як модель дизайну?
Муфлікс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.