MySQL8.0多表设计

多表设计

-- 多表设计
/*
什么时候用到多表?
1.存储不同的信息时 2.为减少数据冗余
多表设计中表与表如何关联?
     数据库设计范式:
     第一范式:列的原子性(不可再分)
     第二范式:要有主键,其他字段都依赖于主键
     第三范式:要消除传递依赖,方便理解,可以看做是“消除冗余”
     
     学生信息表:学号,姓名,性别,生日,手机号,年级id,注册时间
     年级表:年级id,年级名称
     老师信息表:工号,姓名,性别,年级id
     课程信息表:课程号,课程名
     
  弱关系:表与表关联时没有任何约束
  强关系:表与表之间存在约束关系
  
    表与表之间的关联关系
    一对一:一个人对应一张身份证
    一对多:一个年级有多个学生
    多对一:多个学生对应一个年级
    多对多:一个学生可以选修多门课程,一个课程可以被多个同学选修
   
     */

创建数据库

CREATE DATABASE IF NOT EXISTS school_db CHARSET utf8

分别创建年级表,学生表,课程表和选课表。并为他们添加约束和对应外键。

 -- 年级表(主表)
  CREATE TABLE t_grade (id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(15))
  
  -- 学生表(年级号为学生表的外键)
  CREATE TABLE t_student
  (num INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(15)NOT NULL,
    sex CHAR(1),birthday DATE,phone CHAR(11),grade_id INT, reg_time DATETIME)
    
    -- 修改表,添加年级外键约束。  外键与另一个表的主键对应 。
    ALTER TABLE t_student ADD CONSTRAINT grade_fk FOREIGN KEY (grade_id) REFERENCES t_grade(id)                

    -- 课程表
    CREATE TABLE t_course(cnum INT PRIMARY KEY AUTO_INCREMENT,cname VARCHAR(15))
    
    -- 选课表
    CREATE TABLE t_sc(num INT ,cnum INT,
    CONSTRAINT student_fk FOREIGN KEY(num)REFERENCES t_student(num),
    CONSTRAINT course_fk FOREIGN KEY (cnum) REFERENCES t_course(cnum))
         

为各表添加数据如下图:
年级表:

学生表:

在这里插入图片描述

课程表:

在这里插入图片描述
选课表:
在这里插入图片描述

树形目录结构:

在这里插入图片描述

外码约束图:

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值