oracle---数据库设计题目

有含义的列最好不要作为主键,应该用一个没有含义的列做主键,因为有含义就意味着修改,而如果有含义的列做主键,那么修改就要考虑完整性约束问题,因为他作为其他表的外键是耦合度很高的,所以我们需要一个无含义的列来解耦他们。。。只是为了解耦,用存储空间来换取设计上的灵活

数据库设计分析

设计要求,要求设计一个网上购物程序(使用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),  
     ....
  )
  可以对管理员进行分组 ===>需要一个管理员表和一个管理员组表
  一个管理员组可以有多个管理员,一个管理员可以在多个组 
  ===》是多对多关系,需要一张关系表

你可能感兴趣的:(oracle)