blob: 09094f1df17e8538b655f4dbc825945cbeff046a (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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
|