数据库表设计,使用一个或两个字段?

时间:2016-06-07 00:24:39

标签: database-design

我正在设计一张桌子。显然,一个字段可以具有数字输入或文本输入(例如,700或789.0123,或特朗普或克林顿),这取决于应用的主题。

将数字输入存储为varchar文本会更好(例如," 700.0000"或" 789.0123"格式化为4位小数(或其他一些常用小数位) place)与明显的文本输入(特朗普或克林顿)在同一个领域,或者更好的是有两个字段并让几个应用程序(和应用程序程序员)将他们的数据导向适当的字段?

3 个答案:

答案 0 :(得分:1)

该字段的含义或定义是什么,您将用它做什么?

可以是“特朗普”或“789”的字段为我发出警报,听起来非常像是使用单个字段来保存完全不同的数据。

如果字段类似于“上传文档的标识符”,有时用户会给出文本描述,有时他会给出一本书的Dewey Decimal代码,那就没关系了。

但是如果定义类似,“当记录类型为1时,这是一个状态记录,这个字段是赢得主要记录的候选人的名字,但是当记录类型是4时,这是一个区域记录和这个字段是该区域内登记选民的数量“,我只能说...... 。制作两个单独的字段。

将两个完整的不同领域合并为一个有什么优势?除了在表格中添加字段外,还有吗?这会造成各种各样的困难。如果你需要按数值排序或进行范围检查,它就不会起作用,因为当然数字780> 82但字符串'780'< '82',等等。你不能对varchar字段进行算术运算:'780'+ 23是错误或'78023',具体取决于SQL的风格。对于试图理解你的代码的人来说......你甚至称这个领域为什么?

我不知道你的申请。它可能在上下文中有意义。也许如果你告诉我们这个领域代表什么,那将是有道理的。它当然看起来很可疑。

答案 1 :(得分:0)

答案取决于您所需的标准化水平。如果你想要1NF,那么你需要设计原子属性。换句话说,如果您从未计划使用属性的任何细分,那么无论如何都要将它们组合在一起。如果您不需要对属性的任何子集进行验证,排序或查询,那么您可以组合两个看似不同的数据项。

答案 2 :(得分:0)

在格式良好的数据库中,每个字段的内容都是属性的实例,属性将具有特定的域,即可能的值集。拥有跨多种数据类型的域是非常罕见的。您尝试在单个列中存储多个属性的可能性更大。

这几乎总是糟糕的设计。最好先从数据的概念模型开始,这个模型将阐明每个属性的形式和语义。然后设计匹配的列和包含适当列的表。

规范化你的表,除非你有充分的理由不这样做。 (这确实发生在现实生活中,但如果你是新手,不要那么开始。)