首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >表架构最佳实践

表架构最佳实践
EN

Stack Overflow用户
提问于 2012-07-06 22:30:22
回答 3查看 236关注 0票数 2

我有一个表,其中存储了我拥有的工具的配置。它有一个ConfigID,它只是一个身份字段,客户名称,应用程序名称,然后它有18个众所周知的字段(wellknownfield1,wellknownfield2,...,wellknownfield18),我知道根据另一个表值放入什么。

现在我的问题来了。我还需要自定义值。目前我有一个愚蠢的解决方案,有customfieldname1,customfieldvalue1,...,customfieldname20,customfieldvalue20)。其中的值包含我需要用竖线分隔的所有随机值。我正在使用SQL Server数据库。有人有什么建议吗?如果有任何不清楚的地方,请发表意见。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-06 22:38:56

严格地说,您不应该将值分组放入一列中。它违反了关系数据的第一种范式。创建一个名为自定义数据(Config_ID、CUSTOM_NAME、CUSTOM_DATA_VALUE、CUSTOM_DATA_TYPE)的单独表,并在其中存储自定义值。

票数 3
EN

Stack Overflow用户

发布于 2012-07-06 22:36:00

使用另一个带有外键的表。保存所有需要保存的customfieldname值。使用ConfigID作为外键来引用具有额外自定义值的主表上的ConfigID。

票数 0
EN

Stack Overflow用户

发布于 2013-07-25 22:06:35

有一种标准的方法来布局数据库表,以使其易于管理-称为标准化。有不同级别的规范化-第一范式,第二范式,第三范式form...and更高(在我看来,高于第三范式有点深奥)。

这些定义的解释如下:

Normalization in plain English

What are 1NF, 2NF and 3NF in database design?

它可能看起来很抽象-但重点是要消除数据库中的任何歧义或重复,并防止进一步的问题。

正如srini.venigalla指出的那样-您的表不满足第一范式的标准-每行都应该有相同数量的数据,每个DB列一个。同样,这看起来可能是一个抽象的规则--但它是为了防止现实世界的问题--比如,我如何解析这个列值?我怎么知道分隔符是什么?如果它没有足够的数据点怎么办?如果有额外的列,它们的名称是什么?如果每列只有一个值,那么所有这些问题都会消失。

第二个范式和第三个范式也是如此-它们不允许在数据库中重复值/冗余,这可以防止数据库处于不一致状态的实际问题。

关于将数据库规范化到什么程度还存在争议/权衡--但对于初学者来说,让所有东西都满足第三种范式似乎是一个可以接受的经验法则。

(这是我在不得不为我自己的非1NF和非2NF数据库模式编写代码解决方案后得出的结论)

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

https://stackoverflow.com/questions/11364207

复制
相关文章

相似问题

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