blob: 09094f1df17e8538b655f4dbc825945cbeff046a (
plain) (
tree)
|
|
@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
|