首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库表分析混乱

数据库表分析混乱
EN

Stack Overflow用户
提问于 2013-01-21 13:57:47
回答 2查看 50关注 0票数 0

我在用sql-server-2008-R2。我有一个表,其中有三种类型的数据,而类型在另一个表中。

T=表,F=字段,FK =外键,PK =主键

代码语言:javascript
复制
T1: F1(PK), F2(TypeID), F3, F4, F5, F6, F7

T2: F1(TypeID, PK), F2(TypeName)

我想添加第四种类型的,但是这种类型有一个附加的属性(例如TypeRate)。

在项目开始的第一周,我的T1表将至少有300万条记录,然后它将把这个记录降低到每月300万条左右。

现在,我想知道,在下面列出的中,哪种方法是最好的:

A.在主表(T1)中添加一个字段:

代码语言:javascript
复制
T1: F1(PK), F2(TypeID), F3, F4, F5, F6, F7, F8(TypeRate)

大多数情况下,F8将为null (对于其他类型的记录),但我将只有一个表

B.在T1有(T3)的所有字段中添加另一个表

代码语言:javascript
复制
T3: F1(PK), F2(TypeID), F3, F4, F5, F6, F7, F8

因此,T1在大多数情况下不具有空值,但我将有两个表,它们大多是相似的。

C.添加描述表(T4)

代码语言:javascript
复制
T4: F1(PK), F2(FK:T1.PK), F3(TypeRate)

因此,我的T1表没有空值,对于第四种类型的记录,附加数据在T4 (描述表)中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-21 14:22:49

如果不描述你想要完成的事情,你就不能要求“最好”的解决方案。好吧,我想你可以问,但这使得这个问题无法回答。

如果您试图最小化空间(内存和磁盘空间),那么将表分割成两个--正如选项(b)所暗示的--将是最小的空间解决方案。然而,你不太可能选择这个选项。空间效率的增益是最小的,将一个实体分割成两个表通常不是最好的解决方案。

对于每个NULL,第一个解决方案的每一行开销大约要高一点--这是一个非常小的空间。在许多情况下,这似乎是一个很好的解决方案。数据在没有附加连接的情况下是可用的。

第三种解决办法也很好。它需要一个额外的连接来获取数据。但是,如果引用表很小,或者在键上构建索引,那么性能开销应该可以忽略不计。

还有另一个解决办法,我称之为(d)。也就是说,具有与第一个表相同的主键的另一个表以及其他列。当有多个构成自然分组的不同列时,这可能很有用。

总之,一般说来,我赞成(c)项。它以最小的性能命中维护数据库的关系完整性。在某些情况下,我可能会选择(a)或(d)项,但这取决于问题和认为“最好”的是什么。

票数 1
EN

Stack Overflow用户

发布于 2013-01-21 14:23:52

查看Scott关于将对象映射到关系数据库的主题的类论文,特别是关于比较策略的部分

http://www.agiledata.org/essays/mappingObjects.html#ComparingTheStrategies

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14440229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档