Sql 数据库表分析混乱
我正在使用Sql 数据库表分析混乱,sql,database,Sql,Database,我正在使用sql-server-2008-R2。我有一个表,其中有三种类型的数据,这些类型在另一个表中 T=表格,F=字段,FK=外键,PK=主键 我想添加第四种类型,但该类型有一个附加属性(例如TypeRate)。 在项目开始的第一周,我的T1表将至少有300万条记录,然后它会将其降低到每月大约300万条记录 现在我想知道下面列出的方法中,哪种方法最好: T1: F1(PK), F2(TypeID), F3, F4, F5, F6, F7, F8(TypeRate) A.将字段添加到主表(T
sql-server-2008-R2
。我有一个表,其中有三种类型的数据,这些类型在另一个表中
T=表格,F=字段,FK=外键,PK=主键
我想添加第四种类型,但该类型有一个附加属性(例如TypeRate)。在项目开始的第一周,我的T1表将至少有300万条记录,然后它会将其降低到每月大约300万条记录 现在我想知道下面列出的方法中,哪种方法最好:
T1: F1(PK), F2(TypeID), F3, F4, F5, F6, F7, F8(TypeRate)
A.将字段添加到主表(T1):
T1: F1(PK), F2(TypeID), F3, F4, F5, F6, F7, F8(TypeRate)
F8在大多数情况下都是空的(对于其他类型的记录),但我只有一个表
B.添加另一个包含T1所有字段的表(T3):
T3: F1(PK), F2(TypeID), F3, F4, F5, F6, F7, F8
T4: F1(PK), F2(FK:T1.PK), F3(TypeRate)
T1在大多数情况下都没有空值,但我有两个表,它们基本上是一样的
C.添加说明表(T4):
T3: F1(PK), F2(TypeID), F3, F4, F5, F6, F7, F8
T4: F1(PK), F2(FK:T1.PK), F3(TypeRate)
因此,我的T1表没有空值,对于第四种类型的记录,附加数据位于T4(描述表)如果不描述您试图实现的目标,您就不能要求“最佳”解决方案。嗯,我想你可以问,但这使问题无法回答
如果您试图最小化空间(内存和磁盘空间),那么将表拆分为两个(如选项(b)所示)将是最小空间解决方案。然而,你不太可能选择这个选项。空间效率的提高是最小的,将一个实体拆分为两个表通常不是最佳解决方案
第一种解决方案为每一个NULL的每一行带来大约一点额外的开销——相当小的空间量。在许多情况下,这似乎是一个很好的解决方案。数据不需要额外的联接即可使用
第三种解决方案也不错。它需要额外的连接来获取数据。但是,如果引用表很小,或者在键上建立索引,那么性能开销应该可以忽略不计
还有另一个解决方案,我称之为(d)。也就是说,要有另一个与第一个表具有相同主键的表以及其他列。当有多个不同的列组成一个自然分组时,这可能很有用
简言之,作为一般规则,我同意(c)。它以最小的性能损失维护数据库的关系完整性。在某些情况下,我可能会选择(a)或(d),但这取决于问题以及什么是“最好的”。看看Scott Ambler关于将对象映射到关系数据库主题的课堂论文,特别是关于比较策略的部分
请说明为什么每个解决方案都是好的或坏的,以及优缺点。感谢Gordon花时间回答我的问题。你的回答很方便,祝你好运。