Следует учитывать следующее: « может X
существовать вне контекста Y
? ». Дизайн меняется в зависимости от ответа. Основываясь на вашем вопросе и дизайне, это ответы:
| Question |Answer|
+-------------------------------------+------+
|Can a core exist independently? | Yes |
|Can a probe exist without a core? | No |
|Can a device exist without a probe? | No |
|Can a sensor exist without a device? | No |
|Can a channel exist without a sensor?| No |
Согласно этим ответам, жизнеспособный логический дизайн может быть:
-- Core COR exists.
--
core {COR}
PK {COR}
-- Probe number PRO_NO of core COR exists.
--
probe {COR, PRO_NO}
PK {COR, PRO_NO}
FK {COR} REFERENCES core {COR}
-- Device number DEV_NO of probe number PRO_NO
-- of core COR exists.
--
device {COR, PRO_NO, DEV_NO}
PK {COR, PRO_NO, DEV_NO}
FK {COR, PRO_NO} REFERENCES
probe {COR, PRO_NO}
-- Sensor number SNS_NO of device number DEV_NO,
-- of probe number PRO_NO, of core COR exists.
--
sensor {COR, PRO_NO, DEV_NO, SNS_NO}
PK {COR, PRO_NO, DEV_NO, SNS_NO}
FK {COR, PRO_NO, DEV_NO} REFERENCES
device {COR, PRO_NO, DEV_NO}
-- Channel CHN_NO of sensor number SNS_NO,
-- of device number DEV_NO, of probe number PRO_NO,
-- of core COR exists.
--
channel {COR, PRO_NO, DEV_NO, SNS_NO, CHN_NO}
PK {COR, PRO_NO, DEV_NO, SNS_NO, CHN_NO}
FK {COR, PRO_NO, DEV_NO, SNS_NO} REFERENCES
sensor {COR, PRO_NO, DEV_NO, SNS_NO}
- Это плохой дизайн? Нет .
- Это логично? Да .
- А как насчет нормализации? 5NF (с ... атрибутами) .
- Это нормально для физической реализации? Да, может быть, нет, зависит .
Скажите , что вы рассматриваете физический дизайн и беспокоитесь о ширине ключей и размерах индекса. На этом этапе вы решаете следовать естественной иерархии и иметь один идентификатор столбца для каждого объекта, даже если он не может существовать вне контекста другого объекта.
-- Core COR exists.
--
core {COR}
PK {COR}
-- Probe PRO of core COR exists.
--
probe {PRO, COR}
PK {PRO}
FK {COR} REFERENCES core {COR}
-- Device DEV of probe PRO exists.
--
device {DEV, PRO}
PK {DEV}
FK {PRO} REFERENCES probe {PRO}
-- Sensor SNS of device DEV exists.
--
sensor {SNS, DEV}
PK {SNS}
FK {DEV} REFERENCES device {DEV}
-- Channel CHN of sensor SNS, exists.
--
channel {CHN, SNS}
PK {CHN}
FK {SNS} REFERENCES sensor {SNS}
Этот соответствует вашему первоначальному дизайну.
- Это плохой дизайн? Нет .
- Это логично? Да .
- А как насчет нормализации? 5NF (с ... атрибутами) .
- Это лучше? Да, может быть, нет, зависит .
Убедитесь, что вы не разрешаете NULLs
. Разрешение NULLs
для FKs
в основном ответило бы "да" на все ", может X
существовать без Y
? " вопросов и привело бы к совершенно другому дизайну (схеме).
Примечание:
All attributes (columns) NOT NULL
PK = Primary Key
AK = Alternate Key (Unique)
FK = Foreign Key