螺母和螺栓的样本数据Thread Series
。我正在尝试确定此数据集的主键。以下是一些有效组合的示例。
size form tpi
1/4 UNC 20
1/4 UNF 28
1/4 UNEF 32
5/16 UNC 18
5/16 UN 20
5/16 UNF 24
5/16 UN 28
5/16 UNEF 32
3/8 UNC 16
3/8 UN 20
3/4 UNC 10
最终我正在尝试在网络应用中构建下拉菜单,允许用户选择有效的螺栓,例如3/4-10UNC-2A HEX Head.
A 3/4-6UNC-2A HEX Head
无效,因为它们不制造3 / 4“螺栓每英寸6个螺纹(在此表中不会加载)。
第一个下拉选择螺栓类型,第二个下拉提供基于螺栓类型(在另一个db表中定义)可用的螺栓尺寸
第三次下拉将提供螺栓定义的最后部分。因此,如果用户选择HEX Head,那么5/16“他们会看到UNC-18,UN-20,UNF-24,UN-28和UNEF-32的选择。
我对PK的选择可能是:
似乎我选择哪个PK选项与查询无关,因为我会根据螺栓直径查询以获取其他两个值。我遗漏的是2A值,它与另一个表中的UN表格有关,还有一个“doozey”的要求,进一步限制了ThreadSeries可以用于螺栓类型。
我在Java EE中使用JSF和JPA实体(如果重要)
答案 0 :(得分:2)
使用大小和形式作为复合PK,它决定了tpi
的大小
使用size和tpi作为复合PK,它决定了形式
使用form和tpi作为PK,它决定了
所有这些都是错误的假设。随着数据库的增长,没有什么可以阻止其中一个假设被误解。例如。将1/4 UNC 28
添加到股票中。
您不能通过FD确定密钥(除了作为理论课堂练习,使用's和b和cs)。这不是教室。列是真实的,它们有意义(a和b和c没有意义)。你正确地描述了问题,意思。
关键决心是一项直接的逻辑练习,是数据建模的重要组成部分。
您的每个示例行都是Fact。那必须存储。这必须是独特的。
所有三个字段都是PK(可能不对!)
这是唯一正确的PK。这是唯一提供行唯一性的组合,以确保表中没有重复的行。
代理并创建唯一约束。
由于你无法避免给出行唯一性的PK,这将是多余的,一个额外的制造列加上没有任何作用的索引。
代理不提供关系模型中所需的逻辑行唯一性(它们提供物理记录ID唯一性)。
如果您不明白我的意思,请阅读this Answer,从顶部到假教师
我遗漏的是2A值,它与另一个表中的UN表格有关,还有一个“doozey”的要求,它进一步限制了哪些ThreadSeries可以用于螺栓类型。
关系模型基于一阶谓词微积分,通常称为一阶逻辑(FOL)。 FOL中没有任何内容无法说明。因此,没有任何内容无法在Relational数据库中建模。
在“doozey”中打开一个新问题并ping我。
答案 1 :(得分:1)
您的问题根本没有关键值。你正在做的是"向下钻井"找到三列中唯一的值组合。该过程不使用密钥。
但是,我会提出一个建议。您的主要分组字段为form
。它是已知值的非任意固定列表。因此,您可以拥有一个Forms表,其中每种类型的表单都有一个条目:UN,UNC,UNF等。form
字段将被定义为该表的外键。
这将带来两个好处。
form
字段中没有先前未在Forms
表中定义的值。select distinct form from ThreadSeries
,而不是执行select form from Forms
。每个表单都有一个且只有一个条目,不需要使用distinct
- 以及任何碰巧未在ThreadSeries字段中列出的表单(例如,如果没有其他原因,当您创建新表单时)还是出现了。对于主键,您有两种选择。一个是代理键。这具有能够仅使用一个值唯一地标识行的益处。缺点是这个值对用户没有任何意义。当他们在寻找3/4-10UNC-2A HEX Head
时,他们知道如何指定。{1}}。他们可能不知道(并且非常反对必须学习)特定螺钉的值是9383934747甚至是117.这些值(根据定义)是无意义的。您可以通过将PK隐藏起来来防止任何用户对PK的混淆和/或反感。这是常见的做法。
另一种是使用三个字段作为复合PK。这具有以下优点:用户能够基于他们正在寻找的内容来构建PK值,或者在他们浏览时向下钻取。当然,缺点是使用三个字段而不是一个字段。但是,如果三个字段的内容都是您通常可以使用的值,那么这不是一个缺点。但是,这很重要,这三个字段定义了一个自然键,无论你是否明确地将它们定义为主键。因此,即使您决定使用代理键,也必须将这些字段定义为键:每个字段定义NOT NULL,并使用全部三个unique( form, size, tpi )
构建唯一索引。
这不是一个全面的分析。双方都有其他优点和缺点,但它们很小,通常取决于各种因素,因此可能适用于您的情况,也可能不适用,此外,我不会在这里写书。