SQL Server 各种数据类型的四列复合键

Posted

技术标签:

【中文标题】SQL Server 各种数据类型的四列复合键【英文标题】:SQL Server four column composite key of various data types 【发布时间】:2012-09-03 15:47:30 【问题描述】:

我刚刚在查看供应商数据库架构时,我可以查看一个表,该表在四列上有一个复合主键,其中三个是浮点数据类型。我不知道为什么,但这真的让我很震惊。

拥有这种复合主键有什么含义/好处?推荐吗?我认为浮点数作为主键字段很危险。

【问题讨论】:

可以查看此链接:***.com/questions/1105260/…***.com/questions/1318455/… 【参考方案1】:

我猜这个模型在 CAD 中被称为“族表”1。本质上,一个“逻辑几何”可以通过改变维度2而不是添加或删除几何特征来生成许多“物理几何”。

顾名思义,它是一个表格 - 列是维度,每一行代表这些维度的值的特定组合,应该应用于特定“实例”以生成物理几何图形,这看起来与您非常相似在这里向我们展示。

生成两个几何上相同的实例没有任何意义,因此这些维度形成一个键3,只要系统的所有组件“理解”某些数字(例如十进制 0.1 ) cannot be represented exactly 二进制浮点数,无论精度如何。

根据您的数据来自哪里(以及它的去向),您可以坚持当前的设计或考虑改用decimal:

例如,如果您的数据来自 CAD API(或被 CAD API 使用),则它可能已经在此处表示为 double,因此只需将其作为 float 存储在数据库中即可减少摩擦。 如果它来自某些用户需要以十进制数字系统输入的 UI,decimal 可能是更好的选择。

1 “族表”是一个 PTC Pro/ENGINEER(又名 Creo)术语。本质上相同的东西在 Autodesk Inventor 中称为“iPart/iAssemblies”,在 SolidWorks 中称为“配置”。

2 以及参数化设计的其他方面,例如特征抑制,但我们现在不要陷入太多细节......

3无论您是否会引入额外的“代理”键并使其成为主要键,您都需要它。

【讨论】:

【参考方案2】:

我建议您删除此键并将其替换为表上的 id 键自动增量。建议您使用整数类型作为您的密钥,祝您好运

【讨论】:

不幸的是它不是我的数据库。它是来自第 3 方供应商的一张桌子。 我明白你的问题菲尔【参考方案3】:

我认为 FLOAT 键没有什么特别“错误”的地方。正确的类型应该反映列值。 Here is a relevant SO question.

【讨论】:

以上是关于SQL Server 各种数据类型的四列复合键的主要内容,如果未能解决你的问题,请参考以下文章

在 Microsoft SQL Server 中使用复合键

SQL Server + 复合键或唯一 ID

如何使用 SQL Server Management Studio 创建复合键?

Oracle PL/SQL 第五章–复合类型

sql server 2005 一个索引多个字段,字段的排列顺序对搜索有啥影响??

hive复合数据类型array