使用自定义ORM支持进行数据库规范化

时间:2015-08-18 05:45:37

标签: sql-server database vb.net orm

我们有一个数据库,我们目前正在慢慢重建。我们创建了一个内部ORM,它与我们的数据库交互并在代码中为我们提供功能。为了给出一个基本的结构纲要,这就是我们所拥有的:

记录表 - 它使用REC ###号作为其标识符来存储文件。 记录链接表 - 这将我们的记录与REC ###链接到表中的列,其中有数据。

RECORD | PART | ASSET | SERIAL | TASK | SERIAL

现在,我们有链接不存在的空值。

REC123 | NULL | NULL | NULL | ABC123 | NULL

这似乎不太合适,因为记录可以有多个链接:

REC123 | PART1 | NULL | NULL | ABC123 | NULL

所以我们仍然坚持三个想法,可能更多,关于如何解决这个困境。

选项1:

我们有一个处理链接的表,以及基于每个表中主键标识符的链接,其中RecordType列允许它区分不同的记录类型。这种方法对我们的内部ORM并没有很好的效果,但可以接受建议。

RecordLink - Record | RecordType | RecordRowID

在一个单独的RecordType表中,我们有:Type | TypeID链接到RecordType。

选项2:

我们将每个列提取到一个单独的表中,并在每次要创建新链接时添加一个新表。这将意味着PART-RECORDLINK,ASSET-RECORDLINK等

ID | RECORD | LINKID作为列。这有助于编码方面,以及我们内部的ORM。

选项3:

我们保留上述表结构,并在我们想要创建新链接时简单地添加列。然而,这导致大量的空列,并且在编码中将其自身呈现为问题,因为我们必须找到哪些列具有数据,并且基于数据实例化新对象。这个适用于我们的内部ORM。

RECORD | PART | ASSET | SERIAL | TASK | SERIAL | BATCH | NEWLINK | NEWLINK 2等。

我们在其他具有多个链接的表中也存在此问题 - 我们要克服的是为该值添加前缀,但感觉这不是要走的路 - 即

... | LOCATION | ...

... | <c>123 | ...

... | <s>123 | ...

括号中的字母标识客户,供应商,用户等

问题是,有没有办法规范化我们的记录链接表,以便我们可以以最有效的方式使用它,同时减少空值的数量。是否需要拍摄相关表格的快照并将其降低到2或3 NF?

感谢任何帮助。

0 个答案:

没有答案