Data Modelling Vocabulary: ER Diagrams, Normalisation, and Schema Design (англійською)

Англійський словник моделювання основних даних: сутності, відносини, нормалізація, іноземні ключі, індекси, типи моделей dbt, включно з шарами стаджінгу, mart і знімок.

Інженери даних, аналітики даних і розробники, які працюють з базами даних, потребують точного словника для обговорення дизайну схеми, структури моделі і відносин даних. Незалежно від того, чи малюєте ви діаграму взаємозв’ язків між об’ єктами, переглядаєте проект dbt або обговорюєте з колегою компроміси щодо нормалізації, правильний словник зробить розмову швидшою і точнішою.

Диаграма відносин об’єктів (ER) Vocabulary

** Сутність ** — об’ єкт або концепція реального світу, представлена як таблиця у реляційній базі даних. Сутності, зазвичай, є іменниками: Замовник, Замовлення, Продукт, Фактура. « Схема має три основні сутності: Замовник, Замовлення і РядокЗамовлення. »

** Атрибут ** — властивість або характеристика сутності, що відповідає стовпчику у таблиці. « Сутність Customer має атрибути: customer_ id, email, created_ at і country_ code. »

** Відношення ** — зв’ язок між двома об’ єктами. Відношення описуються за їх кардинальністю. « Відношення між Замовником і Замовленням є відношенням один- до- багатьох: один клієнт може зробити багато замовлень, але кожне замовлення належить лише одному клієнту. »

** Кардинальність ** — описує числову природу зв’ язку:

  • ** Один до одного (1: 1) ** — кожен запис у таблиці A відповідає точно одному запису у таблиці B.
  • ** Один до багатьох (1: N) ** — кожен запис у таблиці A може відповідати багатьом записам у таблиці B.
  • ** Багато- до- багатьох (M: N) ** — записи в обох таблицях можуть відповідати декільком записам у іншій, що вимагає створення таблиці з’ єднання.

** Таблиця з’ єднання / асоціативна таблиця ** — таблиця, яку використовують для реалізації зв’ язку « багато- до- багатьох ». « У таблиці з’ єднання OrderProduct зберігаються зв’ язки між замовленнями і продуктами, а також кількість кожного з продуктів у заданому замовленні. »

** Основний ключ ** — стовпчик або комбінація стовпчиків, які унікальним чином ідентифікують кожен рядок у таблиці. « Ми використовуємо UUID як основний ключ для таблиці User, щоб уникнути показу послідовних ідентифікаторів у адресах URL. »

** Інший ключ ** — стовпчик у одній таблиці, який посилається на первинний ключ у іншій таблиці, забезпечуючи цілісність посилань. « Стовпчик order_ id у таблиці OrderLine є зовнішнім ключем, що посилається на стовпчик id у таблиці Order. »

** Цілісність посилань ** — гарантія того, що значення зовнішнього ключа завжди відповідає існуючому значення первинного ключа. « Відкидання цього запису без каскадного правила порушує цілісність посилань. »

Нормалізація мовлення

Нормалізація - це процес структурування бази даних для зменшення надлишку і поліпшення цілісності даних.

** Перша нормальна форма (1NF) ** — кожна колонка містить атомарні (неподільні) значення, і кожен рядок є унікальним. « Таблицю не було у 1NF, оскільки у стовпчику tags зберігалися значення, розділені комами; ми розділили її на окрему таблицю Теги. »

** Друга нормальна форма (2NF) ** — таблиця у 1NF, і кожен атрибут, який не є ключем, повністю залежить від всього первинного ключа (це стосується складних ключів). « Пересування назви продукту з таблиці OrderLine до таблиці Product призвело до того, що схема отримала значення 2NF. »

** Третя нормальна форма (3NF) ** — таблиця у 2NF і жоден атрибут, що не є ключем, не залежить транзитивно від первинного ключа. « Розділення відповідності країни і валюти на власну таблицю посилання виключає транзитивну залежність. »

** Денормалізація ** — навмисне введення надлишковості у схему для поліпшення швидкодії читання. Поширена у аналітичних базах даних і сховищах даних. « Ми денормалізували область клієнта у таблицю подій, щоб уникнути дорогих з’ єднань під час запиту. »

Схема дизайну словника

** Індекс ** — структура бази даних, яка покращує швидкість отримання даних за рахунок додаткової пам’ яті і витрат на запис. « Ми додали складний індекс (user_ id, created_ at) для підтримки найпоширеніших шаблонів запиту на таблицю подій. »

** Складений індекс ** — індекс, який охоплює більше ніж один стовпчик. Порядок стовпчиків у складеному індексі має значення. « Складений індекс на (tenant_ id, status, created_ at) обслуговує найчастіші запити у нашій архітектурі з декількома користувачами »

** Обмеження ** — правило, яке застосовується на рівні бази даних: первинний ключ, зовнішній ключ, унікальний, не нульовий, перевірка. « Додавання перевірочного обмеження до стовпчика amount забезпечує, що ми ніколи не зберігаємо від’ ємне значення транзакції. »

** Розділення на розділи ** — розділення великої таблиці на менші частини, з якими буде легше працювати, на основі значення стовпчика (діапазон, список або геш). « Ми розділимо таблицю подій за місяцями за створено_ в; запиту на останні події буде виконано лише на найновіший розділ. »

** Міграція схеми ** — скрипт, який змінює структуру схеми бази даних у контролюваний, версійний спосіб. « Кожна зміна схеми відбувається за допомогою файла міграції; ми ніколи не змінюємо схему бази даних вручну. »

Типи моделей dbt

dbt (засіб побудови даних) широко використовується у інженерії даних. Його шаровий підхід моделювання має свій власний словник.

** Модель стадії ** — тонкий шар перетворення, який очищає, перейменовує і перетворює необроблені дані джерела. Одна модель стажування на таблицю джерела, мінімальна бізнес- логіка. « Модель stg_orders перетворює поле order_total з рядка на десятковий і перейменовує стовпці, щоб вони відповідали нашій конвенції іменування »

** Проміжна модель ** — модель, яка поєднує або далі перетворює моделі стабілізації, але ще не є вихідним продуктом, який можна використовувати у бізнесі. « Проміжна модель об’ єднує замовлення з поверненнями для обчислення чистої вартості замовлення, яку потім посилаються декілька моделей ринку »

** Модель Mart ** — широка, орієнтована на бізнес таблиця, призначена для звітування і аналізу. Марти часто денормалізовані для швидкості запиту. “Модель fct_orders mart містить один рядок на замовлення з усіма розмірами, які аналітик потребує для звітів про прибуток.”

** Модель знімків ** — модель dbt, яка захоплює стан повільно змінюваної вимірності у певний момент часу, що дозволяє провести історичний аналіз. « Ми створили знімок таблиці users, щоб відстежити зміни рівнів підписки клієнтів з плином часу. »

** Сімеїз ** — файл CSV, завантажений до dbt як статична таблиця посилань. « Коди країн і їхні назви ISO обробляються як сімеїз dbt. »

Приклади слів у контексті

  1. «Взаємозв’язок між Campaign і ConversionEvent є один-до-багатьох; кампанія може генерувати тисячі подій конверсії, але кожна подія приписується саме одній кампанії»

  2. «Ми навмисно денормуємо рівень ціноутворення в таблицю рахунків-фактур, тому що приєднання до конфігурації ціноутворення в час запиту додавало 200 мс до кожного запиту звіту»

  3. «Складений індекс на (customer_id, order_date DESC) був обраний спеціально для підтримки найпоширенішого шаблону доступу: отримання останніх замовлень клієнта»

  4. «Всі зміни схеми версуються як файли міграції в сховищі; жоден DBA не має прямого доступу до запису до виробничої схеми поза переглянутою і схваленою міграцією»

  5. «Наш проект dbt дотримується строгої тришарової архітектури: моделі стадіювання містять тільки перетворення, що відповідають джерелу, проміжні моделі містять логіку з’єднання, а моделі mart є єдиним шаром, який аналітики запитують безпосередньо»

На практиці: Навігація нюансів зворотного зв’язку

Будьмо чесними - коли ви створюєте схему бази даних, особливо в командному середовищі, комунікація іноді може здатися… складною. Термінологія не завжди інтуїтивно зрозуміла, особливо якщо ваша перша мова не є англійською. Легко зануритися в технічний жаргон і пропустити головне повідомлення. Ось тут розуміння того, як професіонали використовують ці терміни, стає таким же важливим, як і знання того, що вони означають.

Розглянемо такий сценарій: Ви надіслали запит на збирання (Pull Request, PR), у якому описано зміни у схемі бази даних замовлень клієнтів. Ваш старший розробник, Сара, залишає коментар до опису PR: « Це хороша робота, але я хвилююся щодо рівня нормалізації. Зокрема, чи можете ви пояснити, чому ми маємо денормовану таблицю перетину для orders і «добутків»? Здається, що це може призвести до оновлення аномалій в майбутньому.” Фраза не агресивна; це конструктивна. Сара не просто каже “неправильно!” Вона використовує точний словник - “рівень нормалізації”, “денормалізована таблиця з’єднань” і, що найважливіше, “оновлення аномалій” - кожна з яких має певні технічні наслідки. Зрозуміти, що «аномалії оновлення» відносяться до потенціалу невідповідності даних, якщо оновлення не обробляються обережно, є ключовим. Це про визнання того, що вона піднімає потенційну проблему, а не видає негайну критику. Аналогічно, у розмовах Slack, де обговорюється дизайн схеми, ви можете почути, як хтось каже: «Сфокусуємося на тому, щоб у нас були належні іноземні ключі для підтримки посилальної цілісності». Наголос тут робиться на принципі підтримки відносин даних — щось, що часто втрачається при перекладі безпосередньо з концепцій рідної мови.

Інша поширена ситуація виникає під час перегляду коду. Рецензент може вказати: « Цей індекс на customer_id у таблиці orders здається зайвим, враховуючи обмеження первинного ключа. » Термін « зайвий » не має на меті зменшити ваші зусилля; він підкреслює потенційну неефективність — індекс, який не пропонує значних прибутків продуктивності і може, з часом, ускладнити обслуговування. Це стосується оцінки компромісів, що беруть участь у проектуванні схеми. Навчання інтерпретувати ці нюанси дозволяє вам ефективно відповісти, можливо, сказати: « Ви маєте рацію; я не враховував вплив обмеження первинного ключа під час додавання цього індексу. Я оціню його необхідність і, можливо, видалю його»

Ціль не в тому, щоб просто повторювати англійські визначення. Це розуміння * чому * певні терміни використовуються в професійному контексті, розпізнавання основних проблем, які вони представляють, і відповідь з відповідною точністю. Це про те, щоб продемонструвати, що ви розумієте не тільки * що * запитується, але * чому * це має значення для загальної стабільності і продуктивності системи.

Ось приклад того, як ви можете використовувати dbt для створення моделі перевірки:

-- dbt Staging Model - Orders
source orders_table {
  sql = """
    SELECT
      order_id,
      customer_id,
      product_id,
      order_date,
      total_amount
    FROM {{ source('raw_orders') }}
  """
}

Цей простий приклад демонструє використання source і SQL для перетворення сирих даних — ключова концепція при обговоренні стадіонарних шарів в dbt. Мова тут не тільки про технічні кроки; це про опис * як * ви готуєте дані для подальшого аналізу, підкреслюючи навмисний і контролюваний процес.

Поширені запитання

Про що ця стаття "Data Modelling Vocabulary: ER Diagrams, Normalisation, and Schema Design (англійською)"?

Англійський словник моделювання основних даних: сутності, відносини, нормалізація, іноземні ключі, індекси, типи моделей dbt, включно з шарами стаджінгу, mart і знімок.

Чи безкоштовна ця стаття?

Так. Усі статті на CoderSlingo, включно з цією, доступні безкоштовно без реєстрації.

Скільки часу займає читання "Data Modelling Vocabulary: ER Diagrams, Normalisation, and Schema Design (англійською)"?

Приблизно 9 min.