資料庫 完整性約束
阿新 • • 發佈:2020-11-29
例子
【問題描述】現有一個商店的資料庫(Shopping),記錄客戶及其購物情況,由以下四個關係組成:
a)客戶表Customer:儲存客戶資訊,包括客戶號CustomerID、客戶姓名Cname、地址Address、電子郵件Email、性別Gender、身份證號CardID、電話號碼TelCode。
b)商品表Goods:儲存商品資訊,包括商品號GoodsID、商品名稱GoodsName、單價UnitPrice、商品類別Category。
c)訂單表Orders:儲存客戶與訂單之間的關係,包括訂單號、客戶號、下單日期。
d)訂單商品表OrderGoods:儲存每個訂單中包含的商品資訊,包括訂單號OrdersID、商品號、商品數量GoodsNum。
每個表的主外來鍵;
客戶的姓名不能為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