From 8c8b32d59acc78c7c3e1e8ecae8492a1b728b482 Mon Sep 17 00:00:00 2001 From: Marcos Magueta Date: Mon, 1 Dec 2025 18:34:31 -0300 Subject: Diagrams (#18) --- docs/constraint-classification.puml | 82 +++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 docs/constraint-classification.puml (limited to 'docs/constraint-classification.puml') diff --git a/docs/constraint-classification.puml b/docs/constraint-classification.puml new file mode 100644 index 0000000..09094f1 --- /dev/null +++ b/docs/constraint-classification.puml @@ -0,0 +1,82 @@ +@startuml constraint-classification +!theme plain +title Constraint Classification (McGoveran Framework) + +package "Database Constraints" { + class RelationConstraints { + Which relations must/can exist + Example: referential integrity + } + + class CardinalityConstraints { + Relation size limits + Examples: + - exactly N tuples + - at most M tuples + } +} + +package "Relation Constraints" { + package "Tuple Constraints" { + class AttributeConstraints { + Domain constraints per attribute + Examples: + - age >= 18 + - salary > 0 + - name ≠ "" + } + + class TupleLevelConstraints { + Cross-attribute rules + Example: + if salary > 200k then age >= 30 + } + } + + package "Relation-Level Constraints" { + class KeyConstraints { + Uniqueness + not null + - Primary keys + - Candidate keys + - Composite keys + } + + class FunctionalDependencies { + A → B + Example: ZIP → {city, state} + } + + class ForeignKeys { + Inclusion dependencies + Example: employee.dept_id ⊆ department.id + } + } +} + +package "Transition Constraints" { + class StateTransitionRules { + Before → After constraints + Examples: + - salary (monotonic increasing) + - created_at (immutable) + } + + class TemporalConstraints { + Time-based rules + Example: end_date >= start_date + } +} + +package "Multi-Relation Constraints" { + class AggregateConstraints { + Cross-relation aggregates + Example: sum(dept_salaries) <= dept_budget + } + + class MutualExclusion { + Disjoint sets + Example: managers ∩ ICs = ∅ + } +} + +@enduml -- cgit v1.2.3