-- 数据库的设计
-- 数据库的设计影响项目开发的难度和项目的性能
-- 1.学习多表的关系
-- 1).一对一
-- 人和身份证???
-- 一个人只有一个身份证一个身份证只有一个人
-- 可以让任意一方添加唯一外键指向另一方的主键
-- 2).一对多(多对一)
-- 部门和员工
-- 一个部门有多个员工,一个员工只有一个部门
-- 实现方式:在多的一方建立外键,指向一方的主键
-- 3).多对多
-- 多对多的关系需要借助中间表,中间表至少包含两个字段,分别指向两张表的主键
-- 学生和课程
-- 一个学生选择多个课程,一个课程也可以被多个学生选择
-- 1.2 实现关系(多对多)
--
CREATE TABLE tab_category(
cid INT PRIMARY KEY AUTO_INCREMENT,-- 主键增长
cname VARCHAR(100) NOT NULL UNIQUE
);
-- 旅游线路主键,自动增长 ---
-- rname 旅游线路非空,唯一,字符串100
-- price 价格
-- rdate 上架时间,日期类型
-- cid 外键,所属分类
CREATE TABLE tab_route(
rid INT PRIMARY KEY AUTO_INCREMENT,
rname VARCHAR(100) NOT NULL UNIQUE,
price DOUBLE,
rdate DATE,
cid INT,
FOREIGN KEY (cid) REFERENCES tab_category(cid)
-- 解释一下外键cid去关联tab_category的cid;
);
-- 用户表 -------
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),
email VARCHAR(100)
);
CREATE TABLE tab_favorite (
rid INT,
-- 线路id
DATE DATETIME,
uid INT,
-- 用户id
-- 穿甲你复合主键
PRIMARY KEY(rid,uid),-- 创建联合主键
FOREIGN KEY(rid) REFERENCES tab_route(rid),
FOREIGN KEY(uid) REFERENCES tab_user(uid)
);
-- 数据库设计 --
-- 设计数据库时候,需要遵循的规范,遵循后面范式必须遵循前面范式
-- 1.第一范式,每一列都是不可分割的原子列
-- 2.第二范式:非主属性完全依赖于主属性
-- 1)函数依赖:如果通过a属性(属性组)的值,可以确定唯一b的属性的值
-- 例子:(学号,课程名称)---> 分数
-- 2).完全函数依赖 如果a是一个属性组,则b属性值得确定血药依赖与a属性组中所有的属性值
-- 3).部分函数依赖,如果a是一个属性组,b的值依赖与其中一个值即可
-- 4).传递函数依赖学号确定系名,系名确定系主任
-- 5).码 学号确定唯一的系名,学号就是系名的码
-- 主属性:码属性中所有的属性
-- 非主属性:除过属性组的属性
-- 3.第三范式:消除传递依赖
-- 数据库的备份和还原 --
-- cmd
-- 图形化工具
多对多关系如图所示