04_数据库设计

多表之间的关系

1. 一对一。例如:人和身份证
    * 在任意一方,添加唯一外键绑定另一方的主键。
2. 一对多。例如:部门和员工.
    * 在多的一方设置外键,绑定一的一方的主键(或者唯一值)
3. 多对多。例如:学生和课程
    * 一个学生可以选择多门课程,一门课程也可以被多名学生选择
    * 多对多实现需要借助第三张表,至少有两个字段,这两个字段作为外键用来对应前两张表的主键,

学生表

学号(id)姓名(name)年龄(age)
1张无忌23
2赵敏21
3珠儿22

课程表

课程编号(id)课程名(name)
1英语
2数学

t_student_class

学号课程编号
11
21
32

案例
分类—>线路:一对多,在线路最后添加外键指向分类的主键
线路—>游客:多对多,借助第三张表。

  • 创建旅游分类表
create table tab_category(cid int primary key auto_increment,cname varchar(100) not null unique);
  • 创建线路表
create table route(rid int primary key auto_increment,rname varchar(100) not null unique,price double, rdate date, cid int);
  • 创建用户表
create table tab_user(uid int primary key auto_increment,username varchar(100) unique not null,password varchar(30) not null,name varchar(100),birthday date,sex char(1) default"男",telephone varchar(11));
  • 创建中间表
create table tab_favorite(rid int,uid int,DATE DATETIME,primary key(rid,uid),foreign key(rid) references tab_route(rid),foreign key(uid) references tab_user(uid));

数据库设计的规范

*基础概念:
    1. 函数依赖:A--->B,如果通过A属性(属性组)的值可以确定唯一B属性(属性组)的值,则称B依赖于A。
        * 学号 ---> 姓名
        * 学号,课程 ---> 分数
    2. 完全函数依赖:A--->B,如果A是一个属性组,B属性组值得确定需要依赖A中得所有属性值。
        * 例如:学号,课程 ---> 分数
    3. 部分函数依赖:A--->B,如果A是一个属性组,B属性组值得确定只需要依赖A中得部分属性值
        * 学号,课程 ---> 姓名
    4. 传递依赖:A--->B,B--->C.如果通过A属性可以确定唯一B属性得值,再通过B属性得值可以确定唯一C属性得值,则称C传递依赖于A
        * 学号--->姓名,姓名--->系主任
    5. 码:如果在一个表中,一个属性或者属性组,被其他属性完全依赖,则称这个属性为该表得码。
* 1. 设计数据库时遵循的规范要求。
* 2. 三大范式
    * 1. 第一范式(1NF):每一列都是不可分割的原子数据项
    * 2. 第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)
        * 主属性:码属性中得所有属性。
        * 非主属性:除过主属性得属性。
    * 3. 第三范式(3NF):在2NF基础上,任何非主属性不依赖于其他非主属性(在2NF基础上消除传递依赖)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值