我们有一个数据库,我们目前正在慢慢重建。我们创建了一个内部ORM,它与我们的数据库交互并在代码中为我们提供功能。为了给出一个基本的结构纲要,这就是我们所拥有的:
记录表 - 它使用REC ###号作为其标识符来存储文件。 记录链接表 - 这将我们的记录与REC ###链接到表中的列,其中有数据。
RECORD | PART | ASSET | SERIAL | TASK | SERIAL
现在,我们有链接不存在的空值。
REC123 | NULL | NULL | NULL | ABC123 | NULL
这似乎不太合适,因为记录可以有多个链接:
REC123 | PART1 | NULL | NULL | ABC123 | NULL
所以我们仍然坚持三个想法,可能更多,关于如何解决这个困境。
我们有一个处理链接的表,以及基于每个表中主键标识符的链接,其中RecordType
列允许它区分不同的记录类型。这种方法对我们的内部ORM并没有很好的效果,但可以接受建议。
RecordLink - Record | RecordType | RecordRowID
在一个单独的RecordType表中,我们有:Type | TypeID
链接到RecordType。
我们将每个列提取到一个单独的表中,并在每次要创建新链接时添加一个新表。这将意味着PART-RECORDLINK,ASSET-RECORDLINK等
ID | RECORD | LINKID
作为列。这有助于编码方面,以及我们内部的ORM。
我们保留上述表结构,并在我们想要创建新链接时简单地添加列。然而,这导致大量的空列,并且在编码中将其自身呈现为问题,因为我们必须找到哪些列具有数据,并且基于数据实例化新对象。这个适用于我们的内部ORM。
RECORD | PART | ASSET | SERIAL | TASK | SERIAL | BATCH | NEWLINK | NEWLINK 2
等。
我们在其他具有多个链接的表中也存在此问题 - 我们要克服的是为该值添加前缀,但感觉这不是要走的路 - 即
... | LOCATION | ...
... | <c>123 | ...
... | <s>123 | ...
括号中的字母标识客户,供应商,用户等
问题是,有没有办法规范化我们的记录链接表,以便我们可以以最有效的方式使用它,同时减少空值的数量。是否需要拍摄相关表格的快照并将其降低到2或3 NF?
感谢任何帮助。