0

我正在尝试熟悉一个结构如下的新数据库:

CREATE TABLE [TableA] (ID int not null, Primary Key (ID))
CREATE TABLE [TableB] (ID int not null, Primary Key (ID))
CREATE TABLE [TableC] (ID int not null, ID2 int, ID3 int, ID4 int, primary key (ID),
FOREIGN KEY (ID2) REFERENCES TableA(ID), FOREIGN KEY (ID3) REFERENCES TableB(ID))

表 C 是表 A 和表 B 之间的多对多连接表。TableC.ID 是唯一的(因为它是主键)。TableC.ID4 也是唯一的,似乎没有引用任何内容。我联系了将其描述为“M1(多对1)实体的非规范化”的开发人员。我完全理解去规范化的目的(规范化数据库,然后出于性能原因故意引入异常),但是我仍然不明白这背后的原因。是否有我不知道的模式或概念?该应用程序是用 C++ 编写的,带有一些 VB.NET。

4

2 回答 2

0

这本身不是一个答案,只是一个相关的想法。请不要开始投票。

tableC.ID 和 tableC.ID4 之间有什么联系吗?在我的一个项目中,我遇到了类似的情况——我在用户表中有用户 ID 和用户名。两者都是唯一的,用户 ID 作为主键。有一种方法可以从该表中删除用户名,并创建一个单独的表,将用户 ID 映射到用户名。我不是规范化的忠实拥护者。所以我认为每次我需要来自包含用户名的用户表中的数据并保持我的设计原样时,触发一个连接查询是一种开销。

于 2012-08-29T05:31:25.967 回答
0

如果 tableC.ID4 包含通常您必须执行附加连接或查找的值,则这是公平的非规范化。那么您是否检查了应用程序代码以查看该列的填充内容?如果它没有引用任何内容并且没有对整个行数据提供任何丰富,那么您可以安全地继续您的开发。

于 2012-08-29T05:15:14.960 回答