首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DB设计:我应该在一个表中还是在一个新表中使用约束

DB设计:我应该在一个表中还是在一个新表中使用约束
EN

Stack Overflow用户
提问于 2011-08-03 00:33:11
回答 4查看 109关注 0票数 4

我继承了一个大型的现有数据库,我想知道我是否应该重构它,因为我95%的查询需要连接至少4个表。

该数据库有5个表,这些表只有少于20行的ID和Name列。我假设作者这样做是为了更改名称,而不是在其他表中更改名称,但这些表中的许多只在另一个表中引用。我是否应该将这些两列的小表重构为一个更大的表,并为列添加一个约束,这样用户就不能输入错误的名称,而不是将表分开?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-03 00:37:12

克制住这种冲动。从你的描述中,我可以推断出现有的设计是可靠的,可能很好地标准化了。你的重构实际上可能会破坏一个好的数据库结构。

如果您为在查询中编写大量连接而烦恼,我建议您创建视图来减轻样板。

...the作者这样做是为了可以更改名称,而不是在其他表中更改它们……

这是良好设计的证据,也是您在规范化数据库中应该努力实现的目标。

票数 8
EN

Stack Overflow用户

发布于 2011-08-03 00:36:32

不是的。

你的数据库是正常的和适当的。您还可以节省空间、查找时间、为存储int而不是varchar名称建立索引

如果对小表进行了适当的键控,它们就会被优化掉。

票数 3
EN

Stack Overflow用户

发布于 2011-08-03 05:28:40

听起来你有的是查询表。让我告诉您,当您决定将所有查找放在一个表中时,会发生什么情况,该表中有一个附加列来指定它是哪种类型。Fisrt不是在一个查询中连接到4个不同的表,而是必须连接到同一个表4次。在“一张表统治所有资源”中,最终出现了更多的资源争用。此外,还会丢失FK约束。这意味着你最终会失去数据的完整性。因此,如果一个查找是state,那么没有什么可以阻止您在customeraddress表的stateid列中为customer类型放置不同查找的id值。当查找是分开的时,您可以强制执行该关系。

假设您决定对customer类型的列有一个约束,而不是一个大表。约束现在是强制的,但当它们需要更改时,您就会遇到问题。现在,您必须更改数据库才能添加新类型。同样,这通常是一个非常糟糕的想法,特别是当表变得很大的时候。

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

https://stackoverflow.com/questions/6915402

复制
相关文章

相似问题

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