数据完整性的实例

<!-- [if gte mso 9]><xml><w:WordDocument><w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel><w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery><w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery><w:DocumentKind>DocumentNotSpecified</w:DocumentKind><w:DrawingGridVerticalSpacing>7.8</w:DrawingGridVerticalSpacing><w:View>Normal</w:View><w:Compatibility></w:Compatibility><w:Zoom>0</w:Zoom></w:WordDocument></xml><![endif]-->

--======================

--author:_yeeXun

--date:12/29/2010 10:18:00 AM

--address:Jau 17-304

--======================

商店售货系统设计


现有一个商店的数据库,记录客户及其购物情况,有下面三个表组成:


商品goods (商品号 goodsId ,商品名 goodsName ,单价 unitprice ,商品类别 category ,供应商 provider );

客户表customer (客户号 customerId ,姓名 name ,住址 address ,电邮 email ,性别 sex ,省份证 cardID;

购买purchase (客户号 customerId ,商品号 goodsId ,购买数量 nums );


sql 语言完成下列功能 :

1. 建表,在定义中要求声明:

a) 每个表的主键

b) 客户的姓名不能为空

c) 单价必须大于0 ,购买数量必须在 1~30 之间

d) 电邮不能重复

e) 客户的性别必须是男或者女,默认为男


Goods表

SQL>createtablegoods(goodsIdchar(8)primarykey,

2goodsNamevarchar2(30),

3unitpricenumber(10,2)check(unitprice>0),

4categoryvarchar2(8),

5providervarchar2(30));

Tablecreated


Customer表

SQL>createtablecustomer(customerIdchar(8)primarykey,

2namevarchar2(50)notnull,

3addressvarchar2(50),

4emailvarchar2(50)unique,

5sexchar(2)default'男'check(sexin('男','女')),

6cardIdchar(18));

Tablecreated


Purchase表

SQL>createtablepurchase(customerIdchar(8)references customer(customerId),

2goodsIdchar(8)referencesgoods(goodsId),

3numsnumber(10)check(numsbetween1and30));

Tablecreated


如果在建立表时忘记建立必要的约束,则可以在建表后使用altertable 命令为表增加约束。但是注意,增加 notnull 约束时,需要使用 modify 选项,而增加其他四种约束使用 add 选项。


2.修改表


a) 每个表的主外码

b) 客户的姓名不能为空; 增加商品名也不能为空

SQL>altertablegoodsmodifygoodsNamenotnull;

Tablealtered


c) 单价必须大于0, 购买数量必须在 1~30 之间

d) 电邮不能重复; 增加省份证不能重复

SQL>altertablecustomeraddconstraintcardUnique unique(cardId);

Tablealtered


e) 客户的性别必须是男或者女,默认为男

f) 增加客户的住址只能是海淀、朝阳、东城、西城、通州、崇文。

SQL>altertablecustomeraddconstraintaddressCheck check(addressin('东城','西城','海淀','朝阳','通州','崇文'));

Tablealtered


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值