数据库 完整性约束

例子

【问题描述】现有一个商店的数据库(Shopping),记录客户及其购物情况,由以下四个关系组成:
a)客户表Customer:存储客户信息,包括客户号CustomerID、客户姓名Cname、地址Address、电子邮件Email、性别Gender、身份证号CardID、电话号码TelCode。
b)商品表Goods:存储商品信息,包括商品号GoodsID、商品名称GoodsName、单价UnitPrice、商品类别Category。
c)订单表Orders:存储客户与订单之间的关系,包括订单号、客户号、下单日期。
d)订单商品表OrderGoods:存储每个订单中包含的商品信息,包括订单号OrdersID、商品号、商品数量GoodsNum。
(1)请用SQL 语句建表,并在定义中进行如下声明:
每个表的主外键;
客户的姓名不能为null ;
电子邮件中必须唯一,且必须包含@和.;
客户的性别必须是男或者女,默认为男;
商品单价必须大于0;
购买数量必须在到0之间30;

create table Customer(
CustomerID char(20) primary key,
Cname varchar(20) not null,
Address varchar(50),
Email varchar(50) unique,
Gender char(2) DEFAULT '男',
CardID char(18),
TelCode char(11),
check(Email like'%@%.%' ),
check(Gender in ('男','女'))
)
create table Goods(
GoodsID varchar(20) primary key,
GoodsName varchar(25),
UnitPrice decimal(10,2) check(UnitPrice>0),
Category varchar(20)
)

create table Orders(
	OrdersID varchar(20) primary key,
	CustomerID char(20) not null,
	Goodstime datetime
	Foreign Key(CustomerID) REFERENCES  Customer(CustomerID),
)

create table OrderGoods(
OrdersID varchar(20) constraint FK_OrderGooD_Orders foreign key(OrdersID) references  Orders(OrdersID) not null,
GoodsID varchar(20) constraint FK_OrderGooD_Goods foreign key(GoodsID) references Goods(GoodsID) not null,
GoodsNum int check(GoodsNum>=0 AND GoodsNum<=30)

1.设置客户表Customer的“身份证号不能重复”。

ALTER TABLE Customer
ADD CONSTRAINT Unique_Customer unique(CardID)

2.设置客户表Customer的“客户的住址只能是海淀、朝阳和东城。”

ALTER TABLE Customer
ADD CONSTRAINT CK_Address check(Address like'%海淀%' or Address like'%朝阳%'or Address like'%东城%')

3.设置Orders的下单日期默认值为当前日期(提示:当前日期函数为getdate())。

ALTER TABLE Orders
ADD CONSTRAINT DF_Goodstime DEFAULT getdate() for Goodtime
posted @ 2020-11-29 15:28  一个经常掉线的人  阅读(434)  评论(0)    收藏  举报