数据库 完整性约束
例子
【问题描述】现有一个商店的数据库(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

浙公网安备 33010602011771号