mysql鸡础(ikun)(数据库设计多对多关系实现,第一/二/三范式概念)

-- 数据库的设计  
-- 数据库的设计影响项目开发的难度和项目的性能
-- 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
-- 图形化工具   

多对多关系如图所示

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值