1 项目数据库设计
1.1 引言
随着高新科技计算机科学技术和移动互联网技术的飞速发展与应用,移动终端的普及,网络技术的完善,人们的生活方式发生了重要的变革,“互联网+饮食”也成为了当今社会的一种主流生活方式之一,由此外卖行业得到井喷式的发展,这与市场需求也是密不可分的,如今的餐饮行业大部分都使用线上,线下共同经营模式,为我们的生活带来了更多的不同的体验。
1.11 项目背景
外卖等订餐服务是互联网技术应用的一种商业模式的创新,以技术与市场需求进行驱动,使得传统餐饮行业的经营模式发生了巨大的变化。
1.12 定义
Oracle数据库
备份方案
容灾方案
1.13 参考资料
[1]Oracle 12C 数据库基础教程/赵卫东,刘永红
[2]https://github.com/zwdcdu/oracle
1.2 项目概述
本项目是基于Oracle的小型外卖系统的数据库设计,包括三大部门(后厨部,服务部,配送部)及其与客户之间的联系,后厨部主要是主厨与厨师助理等角色,服务部主要是店长与前台等角色,配送部主要是数名外卖配送员角色,以及菜单的信息都将在数据库设计中进行完成。
1.3 实施计划
1.3.1任务分解
- 实体图的设计
- 数据库表的设计
- 用户管理
- PL/SQL设计
1.3.2开发平台
Oracle数据库,Linux操作系统,VMware虚拟机,Visio设计工具
2 表设计
2.1 实体图
- 配送部
- 菜品信息
2.2 表的设计
- 在weiwei用户下先测试即将要创建的表,若有就删除该表。
declare
num number;
begin
select count(1) into num from user_tables where TABLE_NAME = 'ORDER_DETAILS';
if num=1 then
execute immediate 'drop table ORDER_DETAILS cascade constraints PURGE';
end if;
select count(1) into num from user_tables where TABLE_NAME = 'ORDERS';
if num=1 then
execute immediate 'drop table ORDERS cascade constraints PURGE';
end if;
end;
在用户weiwei权限下对即将创建的表进行查询验证,如果在user_tables里面找到了即将插入’ORDER_DETAILS’表和’ORDERS’表,那就对其彻底删除,PURGE是清空回收站的意思。
- 在用户wewei下创建’ORDERS’表,并创建了7个以时间为条件的分区。
CREATE TABLE ORDERS
(
ORDER_ID NUMBER(10, 0) NOT NULL
, CUSTOMER_NAME VARCHAR2(40 BYTE) NOT NULL
, CUSTOMER_TEL VARCHAR2(40 BYTE) NOT NULL
, ORDER_DATE DATE NOT NULL
, EMPLOYEE_ID NUMBER(6, 0) NOT NULL
, DISCOUNT NUMBER(8, 2) DEFAULT 0
, TRADE_RECEIVABLE NUMBER(8, 2) DEFAULT 0
, CONSTRAINT ORDERS_PK PRIMARY KEY
(
ORDER_ID
)
USING INDEX
(
CREATE UNIQUE INDEX ORDERS_PK ON ORDERS (ORDER_ID ASC)
LOGGING
TABLESPACE USERS
PCTFREE 10
INITRANS 2
STORAGE
(
BUFFER_POOL DEFAULT
)
NOPARALLEL
)
ENABLE
)
TABLESPACE USERS
PCTFREE 10
INITRANS 1
STORAGE
(
BUFFER_POOL DEFAULT
)
NOCOMPRESS
NOPARALLEL
PARTITION BY RANGE (ORDER_DATE)
(
PARTITION PARTITION_2015 VALUES LESS THAN (TO_DATE(' 2016-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
NOLOGGING
TABLESPACE USERS
PCTFREE 10
INITRANS 1
STORAGE
(
INITIAL 8388608
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS UNLIMITED
BUFFER_POOL DEFAULT
)
NOCOMPRESS NO INMEMORY
, PARTITION PARTITION_2016 VALUES LESS THAN (TO_DATE(' 2017-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
NOLOGGING
TABLESPACE USERS
PCTFREE 10
INITRANS 1
STORAGE
(
BUFFER_POOL DEFAULT
)
NOCOMPRESS NO INMEMORY
, PARTITION PARTITION_2017 VALUES LESS THAN (TO_DATE(' 2018-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
NOLOGGING
TABLESPACE USERS
PCTFREE 10
INITRANS 1
STORAGE
(
BUFFER_POOL DEFAULT
)
NOCOMPRESS NO INMEMORY
, PARTITION PARTITION_2018 VALUES LESS THAN (TO_DATE(' 2019-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
NOLOGGING
TABLESPACE USERS02
PCTFREE 10
INITRANS 1
STORAGE
(
BUFFER_POOL DEFAULT
)
NOCOMPRESS NO INMEMORY
, PARTITION PARTITION_2019 VALUES LESS THAN (TO_DATE(' 2020-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
NOLOGGING
TABLESPACE USERS02
PCTFREE 10
INITRANS 1
STORAGE
(
BUFFER_POOL DEFAULT
)
NOCOMPRESS NO INMEMORY
, PARTITION PARTITION_2020 VALUES LESS THAN (TO_DATE(' 2021-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
NOLOGGING
TABLESPACE USERS02
PCTFREE 10
INITRANS 1
STORAGE
(
BUFFER_POOL DEFAULT
)
NOCOMPRESS NO INMEMORY
, PARTITION PARTITION_2021 VALUES LESS THAN (TO_DATE(' 2022-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
NOLOGGING
TABLESPACE USERS03
PCTFREE 10
INITRANS 1
STORAGE
(
BUFFER_POOL DEFAULT
)
NOCOMPRESS NO INMEMORY
);
在weiwei用户权限下创建了ORDERS表,将ORDER_ID作为主键,起名为ORDERS_PK,使用索引(USING INDEX),表空间为USERS,就是将表段放到USERS中,块保留10%的空间留给更新该块数据使用(PCTFREE 10),初始化事务槽的个数(INITRANS 1),还设置了存储参数(STORAGE)BUFFER_POOL默认缓冲池,作用是将buffer_pool设置表的数据块读到内存中,对应放在哪个池中,不压缩表数据(NOCOMPRESS ),不指定对表进行DML操作时的并行度(NOPARALLEL)。
以订单时间限制2016-01-01 00:00:00、2017-01-01 00:00:00、2018-01-01 00:00:00、2019-01-01 00:00:00、2020-01-01 00:00:00、2021-01-01 00:00:00、2022-01-01 00:00:00分别设置了7个分区:PARTITION_2015、PARTITION_2016、PARTITION_2017、PARTITION_2018、PARTITION_2019、PARTITION_2020、PARTITION_2021,其中PARTITION_2015、PARTITION_2016、PARTITION_2017使用的表空间为USERS;PARTITION_2018、PARTITION_2019、PARTITION_2020使用的表空间为USERS02;PARTITION_2021使用的表空间为USERS03。
- 创建order_details表,表段放在表空间USERS中,分区依赖外键order_id。
CREATE TABLE order_details
(
id NUMBER(10, 0) NOT NULL
, order_id NUMBER(10, 0) NOT NULL
, product_name VARCHAR2(40 BYTE) NOT NULL
, product_num NUMBER(8, 2) NOT NULL
, product_price NUMBER(8, 2) NOT NULL
, CONSTRAINT order_details_fk1 FOREIGN KEY (order_id)
REFERENCES orders ( order_id )
ENABLE
)
TABLESPACE USERS
PCTFREE 10 INITRANS 1
STORAGE (BUFFER_POOL DEFAULT )
NOCOMPRESS NOPARALLEL
PARTITION BY REFERENCE (order_details_fk1);
创建了order_details表,以order_id为外键(起名为order_details_fk1),依赖于orders表的order_id,分区依赖于外键
- 在perfectism用户下创建DEPARTMENTS、EMPLOYEES表。
----创建DEPARTMENTS表
CREATE TABLE DEPARTMENTS
(
DEPARTMENT_ID NUMBER(6, 0) NOT NULL
, DEPARTMENT_NAME VARCHAR2(40 BYTE) NOT NULL
, CONSTRAINT DEPARTMENTS_PK PRIMARY KEY
(
DEPARTMENT_ID
)
USING INDEX
(
CREATE UNIQUE INDEX DEPARTMENTS_PK ON DEPARTMENTS (DEPARTMENT_ID ASC)
NOLOGGING
TABLESPACE USERS
PCTFREE 10
INITRANS 2
STORAGE
(
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS UNLIMITED
BUFFER_POOL DEFAULT
)
NOPARALLEL
)
ENABLE
)
NOLOGGING
TABLESPACE USERS
PCTFREE 10
INITRANS 1
STORAGE
(
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS UNLIMITED
BUFFER_POOL DEFAULT