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

时间:2012-09-03 15:47:30

标签: sql sql-server database-design composite-primary-key

我刚才可以在一个包含四列复合主键的表上查看供应商数据库模式,其中三列是浮点数据类型。我不确定为什么,但这让我感到震惊。

拥有这种复合主键有什么含义/好处?推荐吗?我认为花车是主要的关键领域。

enter image description here

3 个答案:

答案 0 :(得分:2)

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

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

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

根据数据的来源(以及数据的来源),您可能会坚持使用当前设计或考虑使用decimal代替:

  • 例如,如果您的数据来自CAD API(或被其使用),那么它可能已经表示为double,因此将float存储为decimal的摩擦较少数据库。
  • 如果它来自某个用户界面需要在十进制数字系统中输入的用户界面,{{1}}可能是更好的选择。

1 “家庭表”是PTC Pro / ENGINEER(又名.Creo)术语。基本相同的事情在Autodesk Inventor中称为“iParts / iAssemblies”,在SolidWorks中称为“配置”。

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

3 无论您是否引入额外的“代理”密钥并将其设为主要密钥,您确实需要它。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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