一、网络服务销售系统E-R图
案例分析:
现有一个关于网络服装销售系统的项目,要求我们开发数据库部分。系统所能达到的功能包括以下几个方面:
1.客户注册功能。客户在购物之前必须先注册,然后才能浏览到所以库存服装信息,如款式,价格等。
2.顾客可以浏览到库存服装信息,如款式,价格,所剩数量等。
3.顾客可以订购自己喜欢的服装,并可以在未付款之前修改自己的选购信息。商家可以根据顾客是否付款,通过顾客提供的通讯地址给顾客邮
寄其所订购的服装。
根据案例分析过程提取实体集和它们之间的联系,画出相应的E-R图。(尽情发挥)
二、数据库用户
1.创建一个名为DAVID的用户,口令为davidpass,并授予其连接数据库和创建表对象的权限。同时授予其访问另一用户MARTIN的表TEST的权限.
[注]作业要求
(1)作业以sql脚本的方式上交,形式为班级名+学生姓名+章节号,如:“35张三5.sql”.
(2)对于题目中未给出的数据对象结构及数据,要创建数据对象并给出测试数据,保证代码可直接执行.
三、创建数据表
1.创建如下数据库表 bbsUsers、bbsTopic、bbsReply、bbsSection
表 | 表 名 | 作 用 | 备 注 |
用户表 | bbsUsers | 存储注册的用户信息 | 用户注册后才能发贴和回贴 |
主贴表 | bbsTopic | 存储主贴的内容 | 因主贴和跟贴有些内容不同,因此分为两张表 |
跟贴表 | bbsReply | 存储跟贴的内容 | |
版块表 | bbsSection | 存储版块的信息 | 包括版块名、版主等信息 |
各表的结构如下:
表 名 | bbsSection (版块表) | 主 键 | SID | |
列 名 | 数据类型 | 长度 | 是否允许为空 | 描 述 |
SID | int | 4 | 不允许 | 版块编号,自动增长 |
Sname | varchar2 | 32 | 不允许 | 版块名称 |
SmasterID | int | 4 | 不允许 | 版主的用户ID,外键;引用用户表bbsUsers的UID |
Sprofile | varchar2 | 20 | 允许 | 版面简介 |
SclickCount | int | 4 | 允许 | 点击率 |
StopicCount | int | 4 | 允许 | 发贴数 |
表名 | bbsReply(回贴表) | 主键 | RID | ||
列名 | 数据类型 | 长度 | 是否允许为空 | 默认值 | 描述 |
RID | int | 4 | 不允许 |
| 自动编号, 贴子编号 |
RtID | int | 4 | 不允许 |
| 主贴ID;外键,引用bbsTopic表的主键TID |
RsID | int | 4 | 不允许 |
| 版块ID;外键,引用bbsSection表的主键SID |
RuID | int | 4 | 不允许 |
| 回贴人ID, 外键,引用bbsUsers表的主键UID |
Rface | int | 4 | 允许 |
| 回贴表情 |
Rcontents | varchar2 | 30 | 不允许 |
| 正文,必须大于6个字符 |
Rtime | date | 8 | 允许 | 当天 | 回贴时间 |
RclickCount | int | 4 | 允许 |
| 点击数 |
表 名 | bbsTopic(主贴表) | 主 键 | TID | ||
列 名 | 数据类型 | 长 度 | 是否允许为空 | 默认值 | 描 述 |
TID | int | 4 | 不允许 |
| 贴子编号,自动增长 |
TsID | int | 4 | 不允许 |
| 版块编号;外键,引用bbsSection表的主键SID |
TuID | int | 4 | 不允许 |
| 发贴人ID;外键,引用bbsUsers表的主键UID |
TreplyCount | int | 4 | 允许 |
| 回复数量 |
Tface | int | 4 | 允许 |
| 发贴表情 |
Ttopic | varchar2 | 20 | 不允许 |
| 标题 |
Tcontents | varchar2 | 30 | 不允许 |
| 正文,必须大于6个字符 |
Ttime | datetime | 8 | 允许 | 当天 | 发贴时间 |
TclickCount | int | 4 | 允许 | 0 | 点击数 |
Tstate | int | 4 | 不允许 | 1 | 状态,例如是否被锁,是否为精华贴 |
TlastReply | date | 8 | 允许 |
| 最后回复时间,必须晚于发贴时间 |
2、添加约束(bbsUsers)
2-1、非空约束。某列是否允许为空,该约束已在建表时指定(NULL)。
2-2、主键约束。UID列为主键。
2-3、默认约束。
初始密码:默认为6个“8”即888888。
性别:默认为1(男)。
注册日期:默认为当前日期。
用户状态:默认为0(离线)。
用户级别:默认为1(星级)。
用户积分:默认为20点。
2-4、检查约束。
密码:至少6位。
电子邮件:必须包含“@”字符。
2-5、外键约束。本表无外键。
2-6、参照bbsUsers的约束,为其余三张表添加相应约束
习题解析:
/*
Navicat Oracle Data Transfer
Oracle Client Version : 11.2.0.1.0
Source Server : david
Source Server Version : 110200
Source Host : localhost:1521
Source Schema : DAVID
Target Server Type : ORACLE
Target Server Version : 110200
File Encoding : 65001
Date: 2017-07-20 20:33:24
*/
1.
-- ----------------------------
-- Table structure for BBSUSERS
-- ----------------------------
DROP TABLE "DAVID"."BBSUSERS";
CREATE TABLE "DAVID"."BBSUSERS" (
"USERID" NUMBER(4) NOT NULL ,
"UPASS" VARCHAR2(12 BYTE) NULL ,
"GENDER" CHAR(1 BYTE) DEFAULT 1 NULL ,
"UDATE" DATE DEFAULT sysdate NULL ,
"USTATE" CHAR(1 BYTE) DEFAULT 0 NULL ,
"UGRADE" CHAR(1 BYTE) DEFAULT 1 NULL ,
"USCORE" NUMBER(10) DEFAULT 20 NULL ,
"EMAIL" VARCHAR2(20 BYTE) NULL
)
-- ----------------------------
-- Checks structure for table BBSUSERS
-- ----------------------------
ALTER TABLE "DAVID"."BBSUSERS" ADD CHECK ("USERID" IS NOT NULL);
ALTER TABLE "DAVID"."BBSUSERS" ADD CHECK (length(Upass)>6);
ALTER TABLE "DAVID"."BBSUSERS" ADD CHECK (instr(email,'@') > 0);
2.
-- ----------------------------
-- Table structure for BBSREPLY
-- ----------------------------
DROP TABLE "DAVID"."BBSREPLY";
CREATE TABLE "DAVID"."BBSREPLY" (
"RID" NUMBER(4) NOT NULL ,
"RTID" NUMBER(4) NOT NULL ,
"RSID" NUMBER(4) NOT NULL ,
"RUID" NUMBER(4) NOT NULL ,
"RFACE" NUMBER(4) NULL ,
"RCONTENTS" VARCHAR2(30 BYTE) NULL ,
"RTIME" DATE DEFAULT sysdate NULL ,
"RCLICKCOUNT" NUMBER(4) NULL
)
-- ----------------------------
-- Checks structure for table BBSREPLY
-- ----------------------------
ALTER TABLE "DAVID"."BBSREPLY" ADD CHECK (length(Rcontents)>6);
ALTER TABLE "DAVID"."BBSREPLY" ADD CHECK ("RID" IS NOT NULL);
ALTER TABLE "DAVID"."BBSREPLY" ADD CHECK ("RTID" IS NOT NULL);
ALTER TABLE "DAVID"."BBSREPLY" ADD CHECK ("RSID" IS NOT NULL);
ALTER TABLE "DAVID"."BBSREPLY" ADD CHECK ("RUID" IS NOT NULL);
-- ----------------------------
-- Foreign Key structure for table "DAVID"."BBSREPLY"
-- ----------------------------
ALTER TABLE "DAVID"."BBSREPLY" ADD FOREIGN KEY ("RSID") REFERENCES "DAVID"."BBSSECTION" ("SID");
ALTER TABLE "DAVID"."BBSREPLY" ADD FOREIGN KEY ("RTID") REFERENCES "DAVID"."BBSTOPIC" ("TID");
ALTER TABLE "DAVID"."BBSREPLY" ADD FOREIGN KEY ("RUID") REFERENCES "DAVID"."BBSUSERS" ("USERID");
3.
-- ----------------------------
-- Table structure for BBSSECTION
-- ----------------------------
DROP TABLE "DAVID"."BBSSECTION";
CREATE TABLE "DAVID"."BBSSECTION" (
"SID" NUMBER(4) NOT NULL ,
"SNAME" VARCHAR2(32 BYTE) NOT NULL ,
"SMASTERID" NUMBER(4) NOT NULL ,
"SPROFILE" VARCHAR2(20 BYTE) NULL ,
"SCLICKCOUNT" NUMBER(4) NULL ,
"STOPICCOUNT" NUMBER(4) NULL
)
-- ----------------------------
-- Checks structure for table BBSSECTION
-- ----------------------------
ALTER TABLE "DAVID"."BBSSECTION" ADD CHECK ("SID" IS NOT NULL);
ALTER TABLE "DAVID"."BBSSECTION" ADD CHECK ("SNAME" IS NOT NULL);
ALTER TABLE "DAVID"."BBSSECTION" ADD CHECK ("SMASTERID" IS NOT NULL);
-- ----------------------------
-- Foreign Key structure for table "DAVID"."BBSSECTION"
-- ----------------------------
ALTER TABLE "DAVID"."BBSSECTION" ADD FOREIGN KEY ("SMASTERID") REFERENCES "DAVID"."BBSUSERS" ("USERID");
4.
-- ----------------------------
-- Table structure for BBSTOPIC
-- ----------------------------
DROP TABLE "DAVID"."BBSTOPIC";
CREATE TABLE "DAVID"."BBSTOPIC" (
"TID" NUMBER(4) NOT NULL ,
"TSID" NUMBER(4) NOT NULL ,
"TUID" NUMBER(4) NOT NULL ,
"TREPLYCOUNT" NUMBER(4) NULL ,
"TFACE" NUMBER(4) NULL ,
"TTOPIC" VARCHAR2(20 BYTE) NOT NULL ,
"TCONTENTS" VARCHAR2(30 BYTE) NOT NULL ,
"TTIME" DATE DEFAULT sysdate NULL ,
"TCLICKCOUNT" NUMBER(4) DEFAULT 0 NULL ,
"TSTATE" NUMBER(4) DEFAULT 1 NULL ,
"TLASTREPLY" DATE NULL
)
-- ----------------------------
-- Checks structure for table BBSTOPIC
-- ----------------------------
ALTER TABLE "DAVID"."BBSTOPIC" ADD CHECK ("TID" IS NOT NULL);
ALTER TABLE "DAVID"."BBSTOPIC" ADD CHECK ("TSID" IS NOT NULL);
ALTER TABLE "DAVID"."BBSTOPIC" ADD CHECK ("TUID" IS NOT NULL);
ALTER TABLE "DAVID"."BBSTOPIC" ADD CHECK ("TTOPIC" IS NOT NULL);
ALTER TABLE "DAVID"."BBSTOPIC" ADD CHECK ("TCONTENTS" IS NOT NULL);
-- ----------------------------
-- Foreign Key structure for table "DAVID"."BBSTOPIC"
-- ----------------------------
ALTER TABLE "DAVID"."BBSTOPIC" ADD FOREIGN KEY ("TSID") REFERENCES "DAVID"."BBSSECTION" ("SID");
ALTER TABLE "DAVID"."BBSTOPIC" ADD FOREIGN KEY ("TUID") REFERENCES "DAVID"."BBSUSERS" ("USERID");
总结:表的创建需要一定的顺序,因为有时候表里面的内容依赖于别的表中的内容,所以需要先创建所需的表,然后再创建表。