• 复合主键与联合主键(转载)


    复合主键与联合主键

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011781521/article/details/71083112

    一、复合主键

      所谓的复合主键 就是指你表的主键含有一个以上的字段组成,不使用无业务含义的自增id作为主键。

    比如 

    1.  
      create table test
    2.  
      (
    3.  
      name varchar(19),
    4.  
      id number,
    5.  
      value varchar(10),
    6.  
      primary key (name,id)
    7.  
      )

    上面的name和id字段组合起来就是你test表的复合主键 ,它的出现是因为你的name字段可能会出现重名,所以要加上ID字段这样就可以保证你记录的唯一性 ,一般情况下,主键的字段长度和字段数目要越少越好 。

    这里就会有一个疑惑?  主键是唯一的索引,那么为何一个表可以创建多个主键呢?

    其实“主键是唯一的索引”这话有点歧义的。举个例子,我们在表中创建了一个ID字段,自动增长,并设为主键,这个是没有问题的,因为“主键是唯一的索引”,ID自动增长保证了唯一性,所以可以。


    此时,我们再创建一个字段name,类型为varchar,也设置为主键,你会发现,在表的多行中你是可以填写相同的name值的,这岂不是有违“主键是唯一的索引”这句话么?


    所以我才说“主键是唯一的索引”是有歧义的。应该是“当表中只有一个主键时,它是唯一的索引;当表中有多个主键时,称为复合主键,复合主键联合保证唯一索引”。


    为什么自增长ID已经可以作为唯一标识的主键,为啥还需要复合主键呢。因为,并不是所有的表都要有ID这个字段,比如,我们建一个学生表,没有唯一能标识学生的ID,怎么办呢,学生的名字、年龄、班级都可能重复,无法使用单个字段来唯一标识,这时,我们可以将多个字段设置为主键,形成复合主键,这多个字段联合标识唯一性,其中,某几个主键字段值出现重复是没有问题的,只要不是有多条记录的所有主键值完全一样,就不算重复。

    二、联合主键

               联合主键顾名思义就是多个主键联合形成一个主键组合(主键原则上是唯一的,别被唯一值所困扰。)  

               联合主键的意义:用2个字段(或者多个字段,后面具体都是用2个字段组合)来确定一条记录,说明,这2个字段都不是唯一的,2个字段可以分别重复,这么设置的好处,可以很直观的看到某个重复字段的记录条数。

    一个简单的例子 


    主键A跟主键B组成联合主键 


    主键A跟主键B的数据可以完全相同,联合就在于主键A跟主键B形成的联合主键是唯一的。 
    下例主键A数据是1,主键B数据也是1,联合主键其实是11,这个11是唯一值,绝对不充许再出现11这个唯一值。(这就是多对多关系) 


    主键A数据 主键B数据 
    1      1 
    2      2 
    3      3 


    主键A与主键B的联合主键值最多也就是 


    11 
    12 
    13 
    21 
    22 
    23 
    31 
    32 
    33

    总结: 以我来看复合主键就是含有一个以上的字段组成,如ID+name,ID+phone等,而联合主键要同时是多个表的主键联合起来的。这是和复合主键最大的区别!

     
    • DHclly
      DHclly: 一个用户表,用userId+userName这种叫做复合主键 而现在有用户表,房间表, 在关联表用户房间表中,userId(外键)+roomId(外键)这种叫做联合主键 楼主应该是想表达这个意思(3个月前#8楼)举报回复
    • george_auyeung
      george_auyeung: 按你这么说,应该是不同层面的两个概念,联合主键属于业务逻辑上的概念,符合主键属于数据库系统的概念。(3个月前#7楼)
    • Marsjeson
      Marsjeson: 请问复合主键为什么基本类型是String的?(6个月前#5楼)
    • hongdanning
      乔桑宁: composite key和compound key还是没明白区别(7个月前#4楼)
    • u014355937
      起嘛名啊: 从你写的来看,感觉联合主键和复合主键没啥区别啊,http://bbs.csdn.net/topics/392171243?page=1(11个月前#3楼)查看回复(1)
    • AganWD
      AganWD: 当表中有多个主键时,称为复合主键,复合主键联合保证唯一索引”。这句话感觉有点歧义,复合主键应该是指主键本身,与主键有多少并无关系。简单点说:复合主键就是一个主键本身由多个字段组成。而联合主键才是由多个主键组成。不知道我的理解对不对(1年前#2楼)
    • xb2259
      十一月的潇邦: 刚刚学习到联合主键,感觉分析的听透彻(1年前#1楼)收起回复
      • JasonLiao909
        JasonLiao909回复 十一月的潇邦: 一个表只能包含一个 PRIMARY KEY 约束。如果主键由多个列组成,则其中一个列将允许重复值,但是主键中所有列的值的各种组合必须是唯一的。英文叫compound key。楼主明明越说越乱,哪里透彻了。(8个月前)
     
  • 相关阅读:
    2017 多校联合训练 8 题解
    2017 多校联合训练 7 题解
    2017 多校联合训练 6 题解
    2017 多校联合训练 5 题解
    2017 多校联合训练 4 题解
    windows 安装python
    pygame 使用
    python 发布
    面向对象的思维方法
    python 基础
  • 原文地址:https://www.cnblogs.com/hao-1234-1234/p/9850866.html
Copyright © 2020-2023  润新知