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 各种数据类型的四列复合键的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SQL Server Management Studio 创建复合键?