合并值以定义主键?

时间:2012-01-13 13:11:25

标签: database-design

我有一系列行,其中包含我想要存储在关系数据库中的以下信息。我正在考虑将最小/最大年龄与性别相结合来定义主键,但我真的不确定。你认为解决这个问题的最佳方法是什么?。

Min age = 9
Max age = 13
Gender = 'M' 
Nutrient A = 500
Nutrient B = 500
...
Nutrient Z = 600

Min age = 9
Max age = 13
Gender = 'F' 
Nutrient A = 500
Nutrient B = 500
...
Nutrient Z = 600

4 个答案:

答案 0 :(得分:2)

您可以将这两个字段用作主键 -

Age Int NOT NULL,
Gender char NOT NULL,
CONSTRAINT id PRIMARY KEY (Age, Gender)

答案 1 :(得分:0)

创建新的ID列。 将类型设置为整数。 检查自动增量。 将列设置为主键。 让数据库处理它。

不要依赖于连接值的组合来提供唯一标识符。

答案 2 :(得分:0)

我同意其他评论,对主键使用自动增量整数。我只会使用自然键来处理像SSN这样的事情。

答案 3 :(得分:0)

我同意@ SergeyBenner的评论。自然键(唯一标识现实生活中的数据)似乎是{MinAge,MaxAge,Gender},尽管这可能简化为{Age,Gender},其中每个可能的年龄都有一行/性别(相对于每个年龄段的一排)。但是,如果此表必须是外键关系的父级,那么这将是尴尬的(充其量),因此包括代理键(ye olde整数标识列)将提供效率。 (我会将代理键作为主键,但我也会在{Age,Gender}上创建一个聚类唯一索引。)

空闲的好奇心,你是否总是有26列(A到Z)实际填充每一行的数据?如果营养素的数量因组而异,您可能需要进一步标准化。