Немного подробный, но показывает основную методологию проектирования: предикаты и ограничения на естественном языке.
All attributes (columns) NOT NULL
[p x] = predicate x
(c x.y) = constraint x.y
PK = Primary Key
AK = Alternate Key (Unique)
FK = Foreign Key
[p 1] Объект, обозначенный OBJECT_ID
, названный OBJECT_NAME
существует.
(c 1.1) Объект идентифицируется как OBJECT_ID
.
(c 1.2) Каждый объект имеет ровно одно имя; для каждого имени это имя имеет только один объект.
object {OBJECT_ID, OBJECT_NAME} -- p 1
PK {OBJECT_ID} -- c 1.1
AK {OBJECT_NAME} -- c 1.2
[p 2] Существует атом, обозначенный ATOM_NAME
.
(c 2.1) Атом идентифицируется по имени атома.
atom {ATOM_NAME} -- p 2
PK {ATOM_NAME} -- c 2.1
[p 3] Цвет атома ATOM_COLOR
существует.
(c 3.1) Цвет атома определяется как ATOM_COLOR
.
atom_color {ATOM_COLOR} -- p 3
PK {ATOM_COLOR} -- c 3.1
[p 4] Атом ATOM_NAME
появляется в объекте OBJECT_ID
в цвете ATOM_COLOR
.
(c 4.1) Для каждого атома, появляющегося в объекте; этот атом, появляющийся в этом объекте, имеет ровно один атомный цвет.
(c 4.2) Для каждого атома, отображаемого в цвете; этот атом может появляться в этом цвете в более чем одном объекте.
(c 4.3) Для каждого объекта и цвета атома; в этом объекте может появиться более одного атома этого цвета.
(c 4.4) Если атом появляется в объекте в цвете, то этот атом должен существовать.
(c 4.5) Если атом появляется в объекте в цвете, то этот объект должен существовать.
(c 4.6) Если атом появляется в объекте в цвете, то этот цвет атома должен существовать.
atom_object {ATOM_NAME, OBJECT_ID, ATOM_COLOR} -- p 4
PK {ATOM_NAME, OBJECT_ID} -- c 4.1, 4.2, 4.3
FK1 {ATOM_NAME} REFERENCES atom {ATOM_NAME} -- c 4.4
FK2 {OBJECT_ID} REFERENCES object {OBJECT_ID} -- c 4.5
FK3 {ATOM_COLOR} REFERENCES atom_color {ATOM_COLOR} -- c 4.6