|
有含义的列最好不要作为主键,应该用一个没有含义的列做主键,因为有含义就意味着修改,而如果有含义的列做主键,那么修改就要考虑完整性约束问题,因为他作为其他表的外键是耦合度很高的,所以我们需要一个无含义的列来解耦他们。。。只是为了解耦,用存储空间来换取设计上的灵活
数据库设计分析
设计要求,要求设计一个网上购物程序(使用powerdesigner建立模型并编写测试数据),有以下的需求:
1) 管理员可以在后台添加商品,每个商品属于一个商品组
2)可以对管理员进行分组,对每一组进行分别授权,即一个管理员组可以有多个管理员,
一个管理员组有多个权限,一个管理员可以在多个组
3)。用户可以自己购买商品,购买商品时要在订单表中添加信息,一个用户可以同时购买多个商品,
用户可以选择自己所在的地区进行商品的派送
4》用户可以根据自己的购买积分,对商品进行折扣
实现:
一个商品属于一个商品组===》则此时应该建立一个一对多的关系
CREATE TABLE productgroup(
productgroupno NUMBER PRIMARY KEY NOT NULL,
pgname VARCHAR2(50),
desc VARCHAR2(128)
)
CREATE TABLE product(
productno NUMBER PRIMARY KEY NOT NULL,
pname VARCHAR2(50),
price NUMBER,
count NUMBER,
productgroupno NUMBER,
CONSTRAINT productgroup_product_productgroupno_fk FOREIGN KEY(productgroupno)
REFERENCES productgroup(productgroupno) ON DELETE CASCADE
)
管理员可以在后台添加商品===》 说明管理员和商品是有联系的
CREATE TABLE product(
....
managerno VARCHAR2(50),
....
)
可以对管理员进行分组 ===>需要一个管理员表和一个管理员组表
一个管理员组可以有多个管理员,一个管理员可以在多个组
===》是多对多关系,需要一张关系表 |
|
|