x7 MySQL 约束Constraint:案例练习

创建图书管理系统数据库 booksys, 并创建以下4张表:

表1:图书信息表 bookinfo

图书号/bid类别号/cid书名/name作者/author价格/price出版社/press出版/pubdata库存/store
201502013java编程张三79.8机械工业出版社2007/45
201502024php开发艾美美95机械工业出版社2009/42
案例分析:

图书号/bid: 不能为空,唯一标识数据信息, 选择 [主键 primary key];
类别号/cid: 根据图书类型表确定类别号,选择[外键 foreign key];
书名/name: 书名唯一,选择 [唯一 unique];
价格/price; 库存/store: 不能为空,选择 [非空 not null];
作者/author; 出版社/press; 出版/pubdata: 可优化数据库,选择[默认 default]

参考代码:
create table bookinfo(
	book_id int primary key,
	cid int,
	name varchar(30) unique not null,
	author varchar(20) not null,
	press varchar(20),
	pubdata date not null,
	price float(5,2) not null,
	store int not null,
	foreign key(cid) references bookclass(class_id)
);

表2:图书类别表 bookclass

类别号/class_id类别名/name父类别/parent_id
1计算机0
2医学0
3编程语言1
4数据库1
5外科2
6肉科2
案例分析:

类别号/class_id: 选择[主键 primary key]; 自增约束 auto_increment;
类别名/name: 选择[唯一 unique];
父类别/parent_id: 选择 not null 非空

参考代码:
create table bookclass(
	class_id int primary key auto_increment,
	class_name varchar(20) unique not null,
	parent_id int not null
);

表3:读者信息表 readerinfo

证件号/card_id姓名/name性别/sex年龄/age电话/tel余额/balance
360781201910013333张三3313833333333300
360781201911254444李四4413944444444400
360781201911265555王五2513655555555500
360781201911277777郝美1718977777777700
360781201911288888钱朵朵1818888888888800
案例分析:

证件号/card_id: 选择[主键 primary key];
电话/tel: 选择[唯一 unique];
姓名/name; 年龄/age: 选择 [非空 not null];
余额/balance: 选择 [非空 not null]; 不能少于200元,还可设置[默认 default]
性别/sex: 根据男多或女多,选择[默认 default]

参考代码:
create table readerinfo(
	card_id char(18) primary key,
	name varchar(10) not null,
	sex enum('男', '女') default '女',
	age tinyint,
	tel char(11) unique,
	balance decimal(5,2) not null
);

表4:借阅信息表 borrowinfo

图书号/cid证件号/card_id借出日期/borrow_data归还日期/return_data归还状态/status
201502013607812019100133332017/5/52017/6/5
201502023607812019112544442018/8/182017/9/18
案例分析:

图书号/cid: 若为单独主键,则书只能被1个人借阅,不可行;
证件号/card_id: 若为单独主键,则每人只能借1次书,也不可行;
所以可以考虑 图书号/cid +证件号/card_id的复合主键约束;
借出日期/borrow_data; 归还日期/return_data; 归还状态/status: 选择 [非空 not null];

参考代码:
create table borrowinfo(
	bid int,
	card_id varchar(18),
	borrow_data date not null,
	return_data date not null,
	status enum('未还','已还'),
	primary key(bid,card_id),
	foreign key(bid) references bookinfo(book_id)
);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值