SQL - 非规范化

时间:2012-08-28 19:09:12

标签: sql sql-server

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

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是tableA和tableB之间的多对多联结表。 TableC.ID是唯一的(因为它是主键)。 TableC.ID4也是唯一的,似乎没有任何引用。我联系了开发人员,他将其描述为“M1(多对1)实体的非规范化”。我完全理解归一化的目的(规范化数据库然后因性能原因故意引入异常),但是我仍然不理解这背后的原因。有没有我不知道的模式或概念?该应用程序是用C ++编写的,带有一些VB.NET。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

tableC.ID和tableC.ID4之间是否有任何类型的链接?在我的一个项目中,我有类似的情况 - 我在用户表中有userid和username。两者都是唯一的userid作为主键。有一种方法可以从该表中删除用户名,并创建一个将userid映射到用户名的单独表。我不是正常化的忠实粉丝。因此,每当我需要来自包含用户名的用户表的数据并保持我的设计原样时,我认为这是一个触发连接查询的开销。

相关问题