4

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

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

在此处输入图像描述

4

3 回答 3

2

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

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

生成两个几何上相同的实例没有任何意义,因此这些维度形成一个键3,只要系统的所有组件“理解”某些数字(例如十进制 0.1)不能以二进制浮点数精确表示,就可以了不管精度如何。

根据您的数据来自哪里(以及它的去向),您可能会坚持当前的设计或考虑使用十进制

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

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

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

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

于 2012-09-03T19:28:25.403 回答
0

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

于 2012-09-03T15:56:12.923 回答
0

我认为 FLOAT 键没有什么特别“错误”的地方。正确的类型应该反映列值。 这是一个相关的SO问题。

于 2012-09-03T16:03:42.413 回答