Модуль 9 · Урок 33

Реляційна модель, keys і constraints

QA читає schema як контракт даних: що ідентифікує row, які зв’язки дозволені, які значення неможливі та де business invariant виходить за межі одного constraint.

Rows & relationsPrimary keyForeign keyConstraints

Від requirement до data contract

Table моделює тип сутності, row — окремий факт про неї, column — attribute із domain/type. Physical schema не дорівнює всій бізнес-моделі: назви, nullability, keys, defaults, constraints, indexes і migrations треба зв’язати з requirement та версією release.

IdentityPrimary або candidate key однозначно вказує row; composite key використовує кілька columns.
RelationshipForeign key вимагає reference на існуючий row, якщо значення не NULL.
DomainType, NOT NULL, UNIQUE і CHECK відсікають частину недопустимих states.

Що гарантують constraints

ConstraintQA oracle
PRIMARY KEYЗначення унікальне й не NULL; row має стабільну identity.
FOREIGN KEYReference існує; update/delete policy не створює orphan або несподівану cascade.
UNIQUEDuplicate за заданим набором columns відхиляється; NULL semantics перевіряються окремо.
CHECK / NOT NULLInvalid domain/boundary або missing required value не потрапляє до table.

Default підставляє значення, коли column omitted, але не є validation rule і не обов’язково спрацьовує для explicit NULL.

Constraint test matrix

Для кожного rule зафіксуйте valid, boundary та invalid setup; exact action; expected database error class/constraint; відсутність partial row і side effects. В UI/API може бути рання validation, але database constraint лишається останньою лінією цілісності.

Constraint не покриває всю business truth

«Не більше 3 активних позик», баланс між tables або time-dependent rule можуть потребувати transaction-safe application logic. Не приписуйте schema гарантій, яких у ній немає.

Read-only integrity checks

Перевіряйте duplicates через `GROUP BY … HAVING COUNT(*) > 1`, orphan candidates — `LEFT JOIN` з `IS NULL`, missing required data — explicit `IS NULL`. Записуйте schema version, environment, timezone, query text/hash, row count і redacted evidence.

Практика

У SQL QA Pack прочитайте `schema.sql`, заповніть `constraint-test-matrix.csv` і поясніть, які rules гарантує database, а які залишаються application invariant.

Офіційні джерела

Практична перевірка · урок 33 з 44

Закріпіть матеріал уроку

Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.

1. Що означає grain table/result?
2. Що гарантує PRIMARY KEY?
3. Навіщо FOREIGN KEY?