使用一组 4 列将一行标识为唯一的(一个是外键,其他三个是浮点数据类型)是一种好的做法(或者它会不会有任何不利影响)?我正在尝试构建一个表(链接 4 个键)将描述表中的唯一条目。我很好奇这是否是一个好的攻击计划,或者是否有更好的方法。
出于视觉目的,请绘制下表。我们有如下表组织的库存项目:([K]是主键的象征,线条是关系)
Sheet_Class Sheet_Type Sheet_Size
=========== ========== ==========
[K] Sheet_Class-. [K] Sheet_Type--. [K] Sheet_Size
'---- Sheet_Class '---- Sheet_Type
Length
Width
Thickness
Run Code Online (Sandbox Code Playgroud)
数据可能以下列方式呈现,但为简洁起见,我排除了引入链接列的可能性:
Sheet_Class Sheet_Type Sheet_Size (Tables)
[Sheet_Class] [Sheet_Type] [Length], [Width], [Thickness] (Column Values)
============= ============ ==============================
Aluminum
5052-H32
48, 96, 0.032
48, 96, 0.040
48, 96, 0.063
6061-T6
60, 120,0.032
60, 120,0.040
60, 120,0.063
Steel
1018-CRS
48, 96, 0.018
48, 96, 0.023
48, 96, 0.031
Run Code Online (Sandbox Code Playgroud)
就目前情况而言(并且我已经在上面的“架构”中显示),我对Sheet_Size表中的条目使用了一个简单的(自动递增)整数主键。但是,我想知道使用Sheet_Type、Length、Width和Thickness列的组合是否更好?鉴于 Sheet_Size 中的每个条目都应该共享所有这些独特的品质,并且自动递增字段不能很好地证明这一点,这是最好的选择吗?
如果我没有很好地解释情况,请告诉我。我发现自己需要为其他逻辑目的分解库存材料的这些部分(类别与类型与实际库存大小),但我准备接受任何其他类型的反馈。
任何指导将不胜感激。
发布答案后,我决定将Mark 的答案和X-Zero 的答案结合起来。我认为对长度、宽度和厚度列设置独特的约束是个好主意,但我也喜欢将材料尺寸分解为独特的行并将它们与关系联系起来的想法。
不幸的是,我不能同时接受这两个答案,因此我将接受 X-Zeros 以(我的感觉)更批判地看待问题并提供架构调整。
谢谢大家的回答。
小智 6
考虑到这一点后,我会稍微修改一下您的表结构。
首先,修改您的图纸尺寸表:
Sheet_size
===========
Id
Length
Width
Thickness
Run Code Online (Sandbox Code Playgroud)
其次,创建一个sheet-size/type关系表:
Sheet_size_type
================
Sheet_Type_Id
Sheet_Size_Id
Run Code Online (Sandbox Code Playgroud)
然后,创建以下约束:
Sheet_size应该是 id 列Sheet_size。考虑一下,两张尺寸 (48, 96, .5) 和 (96, 48, .5) 是否相等(也就是说,尺寸的方向是否重要)?如果通过使用列作为主键的一部分,这种问题可能难以解决,但在使用约束和存储过程时变得更易于管理。Sheet_size_type应该使用两个外键,从基数较低的那个开始(可能是sheet_type,给定你的例子)。您可能需要另一个方向的附加索引,但这可能不是必需的。此版本将节省您的数据库空间(作为使用相同大小的工作表类型数量的比率),并且不会对开销产生太大影响。
如果您使用float数据类型,还有其他关于相等性/唯一性的潜在问题,因为不精确可能会意外地绊倒您。您应该考虑定点类型是否更适合某些给定的精度。
| 归档时间: |
|
| 查看次数: |
1474 次 |
| 最近记录: |