0
点赞
收藏
分享

微信扫一扫

基于单片机的蓝牙音乐喷泉的设计与实现

英乐 2023-07-22 阅读 71

一对一

  • 案例:用户 与身份证信息 的关系
  • 关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其它字段放在另一张表中,以提高操作效率
  • 实现:在任意一方加入外键,关联另一方的主键,并且设计外键为唯一的(unique)
  • 具体代码及运行结果如下:
  • create table tb_user(
    id int unsigned primary key auto_increment comment 'ID',
    name varchar(10) not null comment '姓名',
    gender tinyint unsigned not null comment '性别, 1 男 2 女',
    phone char(11) comment '手机号',
    degree varchar(10) comment '学历'
    ) comment '用户信息表';

    insert into tb_user values (1,'白眉鹰王',1,'18812340001','初中'),
    (2,'青翼蝠王',1,'18812340002','大专'),
    (3,'金毛狮王',1,'18812340003','初中'),
    (4,'紫衫龙王',2,'18812340004','硕士');


    create table tb_user_card(
    id int unsigned primary key auto_increment comment 'ID',
    nationality varchar(10) not null comment '民族',
    birthday date not null comment '生日',
    idcard char(18) not null comment '身份证号',
    issued varchar(20) not null comment '签发机关',
    expire_begin date not null comment '有效期限-开始',
    expire_end date comment '有效期限-结束',
    user_id int unsigned not null unique comment '用户ID',
    constraint fk_user_id foreign key (user_id) references tb_user(id)
    ) comment '用户信息表';

    insert into tb_user_card values (1,'汉','1960-11-06','100000100000100001','朝阳区公安局','2000-06-10',null,1),
    (2,'汉','1971-11-06','100000100000100002','静安区公安局','2005-06-10','2025-06-10',2),
    (3,'汉','1963-11-06','100000100000100003','昌平区公安局','2006-06-10',null,3),
    (4,'回','1980-11-06','100000100000100004','海淀区公安局','2008-06-10','2028-06-10',4);

  •  

  • 上述的两个表中的信息都是对于用户信息的描述,但是将用户的基本信息独立为一张表,并且同剩余信息建立了一对一的联系。

多对多

  • 案例:学生 与 课程的关系
  • 关系:一个学生可以选修多个课程,一门课程也可以供多个学生选择
  • 实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方外键
  • 具体代码及运行结果如下:
  • create table tb_student(
    id int auto_increment primary key comment '主键ID',
    name varchar(10) comment '姓名',
    no varchar(10) comment '学号'
    ) comment '学生表';
    insert into tb_student(name, no) values ('黛绮丝', '2000100101'),('谢逊', '2000100102'),('殷天正', '2000100103'),('韦一笑', '2000100104');


    create table tb_course(
    id int auto_increment primary key comment '主键ID',
    name varchar(10) comment '课程名称'
    ) comment '课程表';
    insert into tb_course (name) values ('Java'), ('PHP'), ('MySQL') , ('Hadoop');


    create table tb_student_course(
    id int auto_increment comment '主键' primary key,
    student_id int not null comment '学生ID',
    course_id int not null comment '课程ID',
    constraint fk_courseid foreign key (course_id) references tb_course (id),
    constraint fk_studentid foreign key (student_id) references tb_student (id)
    )comment '学生课程中间表';

    insert into tb_student_course(student_id, course_id) values (1,1),(1,2),(1,3),(2,2),(2,3),(3,4);

  •  

  • 三个表之间的关系如下

     
举报

相关推荐

0 条评论