Я занимаюсь разработкой системы прослеживаемости, которая регистрирует определенные действия при изготовлении многоуровневого изделия. Родительский элемент состоит из 2 или 4 родительских элементов, который, в свою очередь, состоит из 2 дочерних элементов.
На каждом уровне, в различных точках производственного процесса, проводятся испытания на утечку для всех трех типов изделий - информация, записанная для каждого из них, будет одинаковой: скорость утечки, флаг прохождения или отказа, временные метки и т. Д.
Поэтому я могу выбрать одну LeakTests таблицу с общим полем FK для хранения идентификатора элемента, к которому относится тест, вместе с индикатором, показывающим, к какой таблице относится FK:
PK: LeakTestID, Int
FK: LeakTestItemID, Int
FK: LeakTestTypeID, Int
LeakageRate, Float
Result, Bit
Хранить ли FK для каждого типа в отдельном поле?
PK: LeakTestID, Int
FK: ChildID, Int
FK: ParentID, Int
FK: GrandparentID, Int
LeakageRate, Float
Result, Bit
Или я выберу 3 таблицы испытаний на утечку, по одной на каждый уровень предмета.
Я вижу различные преимущества и недостатки каждого из них, и я несколько раз передумал.
Есть мысли? Я боюсь, что требования для этой системы едва определены, и часть моей работы - бороться с бизнесом и нижестоящими клиентами, чтобы придавить обе стороны. Но как бы то ни было, я не могу быть уверен, как будут использоваться данные, и если / как, вероятно, изменятся требования.
Разъяснение : Я думаю, что бит g-parent / parent / child бросил людей - 3 уровня не идентичны, они совершенно разные, например:
ATS:
PK: ATSID, Int
MeasurementA char()
MeasurementB char()
MeasurementC char()
SleevedPair:
PK: SleevedPairID, Int
MeasurementD char()
MeasurementE char()
SleevedItem:
PK: SleevedItemID
MeasurementG char()
MeasurementH char()
MeasurementI char()
MeasurementJ char()
MeasurementK char()
... просто случается, что с каждым объектом связан один или несколько тестов на утечку.