我正在尝试帮助我的妻子为她的项目创建一个模式,但我对她的一些数据以及如何对其建模感到有些困惑。
她有一堆进入数据库的“标准”。这些都相当简单。就像是:
Standards
ID Code Description
-- ---- -----------
1 7DF1 Description of some standard blah
2 7DF2 Description of some other standard asdf
3 8A33 Yet another description
但是,这些“标准”中的一些有一种“不合标准”。所以 8A33 可能有 a、b 和 c 部分需要单独引用。
所以很容易创建一个如下所示的 Substandards 表:
Substandards
ID StandardID Code Description
-- ---------- ---- -----------
1 3 a Description of 8A33 part a
1 3 b Description of 8A33 part b
但是现在其他表需要参考一个标准,这个标准可以是正常的标准,也可以是不合格的。我不知道如何保持正常形式。我能想到的就是这样做,但这似乎是错误的:
SomeOtherTableThatReferencesStandards
ID StandardID SubstandardID
-- ---------- -------------
1 1
2 2
3 3 a
4 3 b
SubstandardID 字段中存在空数据表明我可能做错了什么,但我想不出更好的方法来做到这一点。我考虑过有一个字段告诉您 ID 是标准还是子标准,但是我不能真正保持参照完整性(没有外键)。
我知道这有点模糊,因为我这里没有真实数据,但我认为这可能是一个很容易解决的常见问题,我希望有人能认识到它。
考虑一个用于层次结构的 parent_id 列。这将类似于员工表的常见概念。使用员工结构,您不会为达到就业层级创建表。
在这种结构中,所有标准都在同一个表中。但是,子标准将在 parent_id 列中有一个值,将它们指向它们是子标准的标准。下面是如何存储数据的示例。任何具有 NULL parent_id 的标准都可以被视为顶级标准。