1. 程式人生 > 資料庫 >資料庫 完整性約束

資料庫 完整性約束

例子

【問題描述】現有一個商店的資料庫(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