数据库中复合主键的应用场景

前言

在数据表操作中,使用主键来保证数据记录的唯一性是非常常见的应用,比如以自增长的整型ID,或者以身份证号,或者会员号之类的字符串型,都是可以的。但是在实际应用中,不可能这么理想,请下面的实例。

准备工作

现有两个数据表:材料表 Material 和 零件表,结构如下:

Material 表

 M_ID |  Name |  Property
----------------------------------
  1   |  原铁  | 属性参数
  2   |  合金  | 属性参数

Part 表

P_ID  |  Name |  Model
----------------------------------
  1   |  螺栓  | B232C1
  2   |  螺母  | T322L0

问题描述

现在在生产的时候,需要有一张产品类型说明表 ProductType,此表中会表明什么类型的产品使用何种材料制作何种零件,结构如下所示:

ProductType表

M_ID | P_ID | Description
----------------------------------
 1   |   1  | 描述1
 1   |   2  | 描述2
 2   |   1  | 描述3

在ProductType表中,有一个要求就是使用同一原料生成的某一零件属于哪一类型的产品要有唯一对应关系,即M_ID和P_ID的组合不能重复,比如 (1,1)的组合只能出现一次。这个问题我们不能直接使用加主键的方式来解决,同时如果通过每次数据插入时检测又太麻烦,而且效率也会降低。

解决办法

这时候,复合主键就派上用场了。我们可以将M_ID和P_ID组合成一个主键,从而避免两者重复。具体作法如下:

创建表时建立复合主键

create table test  
(  
  M_ID int,
  P_ID int,  
  Description varchar(1000),  
  primary key (M_ID, P_ID)   -- 关键操作
)

向已有表追加复合主键

add constraint PK_ID primary key(M_ID, P_ID)

注意事项

  • 数据库表中不能有多个主键,如果已经存在主键,则复合主键会创建失败
  • 复合主键的效率受数据类型影响,尽量使用简单数据类型
  • 在创建复合主键时,数据关系一定要理清楚,否则可能会带来未知的错误

你可能感兴趣的:(数据库技术)