软件开发综合实践 学习笔记

软件开发综合实践是一个拆分的课程(拆成签到和大作业).

课程有签到和一个大作业,其余没了.
签到的形式是拍照签到,有点恶心.
这个课程需要结组,Fluu是二人组,这个人帮Fluu签到,Fluu承担所有的开发工作.

说白了就是黑马点评,或者苍穹外卖,或者什么12306,只不过数据库需要换成Oracle.

本着有轮子就不要自己写的原则(反正自己写也是Vibe Coding),Fluu选择魔改一个repo,给这个仓库的主人点了个star.

仓库链接

魔改

这个项目有四个sql文件,需要依次注册到oracle数据库中,然后才能查询.
比较抽象的一点在于实验用的oracle数据库是11g版本,这个repo的oracle版本未知,导致旧的触发器不能用,需要让AI魔改一下(oracle版本支持太烂了).

这个项目的图片采用链接的形式储存,可以预见地年久失修图片链接都炸了,所以我们需要自己去换图片,可以找个免费图床.

我对于oracle的理解

  1. oracle是用户驱动的,这个用户可以理解为mysql里面的数据库.
    然后每个用户可以有很多个表,这个和mysql里面一个数据库可以有很多个表差不多.
    整个实验都会在一个名为 SYS 的用户中进行,所以这个倒不用深究.

  2. oracle里面有触发器,序列还有一些神秘的范围限制,这个序列机制似乎和mysql还不太一样,因为oracle不自带自增的主键,需要创建一个序列,每次从这个序列中拿一个自增的数字当作主键.

  3. oracle对于旧版本的支持似乎很烂.

答辩/代价

这个部分非常重要!直接影响了这个课的得分!
这个课最后有一个答辩,这个答辩会首先让你展示你开发了什么,各种功能都长什么样,你这个项目是什么架构(cs架构还是bs架构).

然后会问一些oracle的八股!!!
比如你这个项目用没用外键,或者用没用序列,或者用没用触发器.
这个部分很关键,答辩一半的时间都在问这些东西,而且这个老师不是对oracle一窍不通的,导致这个课程的答辩时间很长,几乎要用两三天,一堆人在排队等答辩,不像别的课两节课就答辩完了.

所以如果你不偷懒的话,不要用Fluu魔改的这个项目,因为数据库结构过于简单,答辩会非常吃亏,能不用就不要用,除非你打算一天速通这个课可以用一下,保证能跑起来就行.

结论

牢记:这个课程是希望你设计尽可能复杂的数据库结构,而不是让你设计尽可能复杂的前后端!!!
不能发现这一点的答辩基本上都吃大亏了.

开源

我主要魔改了下面的东西:(其实本来还想把这个改成前后端分离的架构,但是AI写的不够好最终放弃了)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
/*
* T_BOOK_INFO.sql
*
* =============================================================================
* 【答辩说明】本脚本涉及的 Oracle 对象与概念对照(以本文件为例)
* =============================================================================
*
* 1) 数据表(Table)
* 本文件核心对象是表 T_BOOK_INFO,用于存储图书主数据:书名、作者、价格、
* 分类、简介、是否借出、封面图 URL 等。表是关系数据库中存储行数据的逻辑结构。
*
* 2) 用户 / 方案(User / Schema)
* 对象名写成 "SYSTEM"."T_BOOK_INFO",表示该表属于用户(方案)SYSTEM。
* 在 Oracle 中,用户与方案通常一一对应;登录用户 SYSTEM 后可直接访问同名方案下的对象。
* 生产环境一般不建议在 SYSTEM 下建业务表,答辩时可说明:本题为课程/演示环境导出。
*
* 3) 表空间(Tablespace)
* 本 CREATE TABLE 未写 TABLESPACE 子句,表示段(表的数据段)建在创建者用户的
* 「默认表空间」中(此处多为 SYSTEM 用户的默认表空间,具体以数据库配置为准)。
* 下面 STORAGE、PCTFREE 等属于段的物理存储属性,仍落在某个表空间的数据文件上。
*
* 4) 主键(Primary Key)与外键(Foreign Key)
* 主键:文件后部通过 ALTER TABLE ... ADD CONSTRAINT PK_T_BOOK_INFO PRIMARY KEY (BOOKID)
* 定义在 BOOKID 上,保证每本书编号唯一且非空,并作为行的唯一标识。
* 外键:BOOKTYPEID 在业务上应对应图书分类表(如 T_BOOK_TYPE.BOOKTYPEID),
* 但本导出脚本未声明 FOREIGN KEY;若答辩需要,可补充:
* ALTER TABLE ... ADD CONSTRAINT FK_... FOREIGN KEY (BOOKTYPEID) REFERENCES T_BOOK_TYPE(BOOKTYPEID);
* 用于引用完整性,防止出现不存在的分类编号。
*
* 5) 索引(Index)
* 在 Oracle 中,创建主键约束时会自动创建唯一索引(Unique Index)支撑 BOOKID 查找。
* 本文件未单独建二级索引;若按书名、作者频繁查询,可另建:
* CREATE INDEX IX_T_BOOK_INFO_NAME ON T_BOOK_INFO(BOOKNAME);
*
* 6) 视图(View)
* 本文件未定义视图。视图是基于查询的虚拟表,常用于权限隔离、简化复杂 SQL 或统计汇总。
* 例如可建:CREATE VIEW V_BOOK_WITH_TYPE AS SELECT b.*, t.BOOKTYPENAME FROM T_BOOK_INFO b JOIN ...
*
* 7) 序列(Sequence)
* SEQ_T_BOOK_INFO 用于生成单调递增的 BOOKID(数字序列),与触发器配合可实现插入时
* 自动生成主键(类似自增)。CACHE 20 表示一次缓存 20 个序号,减少字典争用。
*
* 8) 触发器(Trigger)
* TRG_T_BOOK_INFO_BI 为 BEFORE INSERT、行级触发器:当插入行未显式给 BOOKID 时,
* 从序列取 NEXTVAL 赋给 :NEW.BOOKID,实现应用层可不传主键的插入方式。
*
* 9) 过程与函数(Procedure & Function)
* 本文件未定义存储过程/函数。文件开头的 PL/SQL 匿名块仅用于「若序列存在则删除」
* 的容错 DROP,不是独立存储过程。业务上可把借书校验、库存变更等封装为 PROCEDURE。
*
*10) 大对象(LOB:BLOB / CLOB / NCLOB 等)
* 本表 BOOKDESC 使用 VARCHAR2(1000),BOOKIMG 存图片 URL 字符串而非二进制。
* 若要在库内直接存长文本或图片,可使用 CLOB / BLOB 类型及 DBMS_LOB 等机制;
* 当前设计属于「路径引用」,减轻库体积、便于用对象存储/CDN 托管图片。
*
* =============================================================================
*/


-- =============================================================================
-- 一、表结构:T_BOOK_INFO(图书信息表)
-- =============================================================================
-- DROP 用于重复执行脚本时先删除旧表;生产环境需谨慎,避免误删数据。
DROP TABLE "SYSTEM"."T_BOOK_INFO";

CREATE TABLE "SYSTEM"."T_BOOK_INFO" (
-- BOOKID:图书主键列,与后部 PK、序列、触发器配合,唯一标识一本书
"BOOKID" NUMBER NOT NULL,
-- BOOKNAME:书名,VARCHAR2(255 BYTE) 按字节计长,需注意多字节字符集下单字符可能占多字节
"BOOKNAME" VARCHAR2(255 BYTE) NOT NULL,
-- BOOKAUTHOR:作者
"BOOKAUTHOR" VARCHAR2(255 BYTE) NOT NULL,
-- BOOKPRICE:定价,NUMBER 可存整数或小数(未指定精度时由 Oracle 默认规则处理)
"BOOKPRICE" NUMBER NOT NULL,
-- BOOKTYPEID:图书分类编号;业务上多对应 T_BOOK_TYPE,本脚本未建外键约束
"BOOKTYPEID" NUMBER NOT NULL,
-- BOOKDESC:内容简介;最长 1000 字节,超长文本可考虑 CLOB
"BOOKDESC" VARCHAR2(1000 BYTE) NOT NULL,
-- ISBORROWED:是否已借出,此处用 0/1 等数值表示状态(具体含义由应用约定)
"ISBORROWED" NUMBER NOT NULL,
-- BOOKIMG:封面地址(URL);非 BLOB,图片实际文件通常在外部存储或 Web 服务器
"BOOKIMG" VARCHAR2(255 BYTE) NOT NULL
)
-- LOGGING:插入/更新等操作记录 redo,便于恢复;NOLOGGING 则相反(本表为 LOGGING)
LOGGING
-- NOCOMPRESS:不对表段启用混合列压缩(版本与选项相关,此处为导出默认写法)
NOCOMPRESS
-- PCTFREE 10:块内预留约 10% 空间供后续 UPDATE 行变长使用,减少行迁移
PCTFREE 10
-- INITRANS 1:数据块初始事务槽位数,并发更新多时可适当增大
INITRANS 1
-- STORAGE:指定区(extent)的初始大小、下次扩展、最小区数等(与表空间数据文件相关)
STORAGE (
INITIAL 65536 -- 首区大小(字节)
NEXT 1048576 -- 下次扩展区大小
MINEXTENTS 1 -- 段最少包含的区数
MAXEXTENTS 2147483645
FREELISTS 1 -- 手动段空间管理下的空闲块列表(传统特性,新库多用 ASSM)
FREELIST GROUPS 1
BUFFER_POOL DEFAULT -- 缓存池策略,DEFAULT 为常规缓存
)
PARALLEL 1 -- 并行度,1 表示不按并行扫描默认拆分
NOCACHE -- 全表扫描时块默认不长期固定在缓冲区热点(与 CACHE 相对)
DISABLE ROW MOVEMENT -- 不允许为分区/收缩等操作移动行地址;若需 FLASHBACK 行迁移可启用
;


-- =============================================================================
-- 二、示例数据(INSERT):用于演示或初始化测试库
-- =============================================================================
-- 注意:触发器在 BOOKID 为 NULL 时自动生成编号;此处 INSERT 显式写了 BOOKID,将直接使用给定值。
INSERT INTO "SYSTEM"."T_BOOK_INFO" VALUES ('1', 'Java程序设计', '耿祥义', '55.5', '1', '《Java2实用教程》不仅可以作为高等院校相关专业的教材,也适合自学者及软件开发人员参考使用。Java是一种很优秀的编程语言,具有面向对象、与平台无关、安全、稳定和多线程等特点,是目前软件设计中极为健壮的编程语言。Java语言不仅可以用来开发大型的应用程序,而且特别适合于在Internet上应用开发,Java已成为网络时代最重要的编程语言之一。', '0', 'http://fluu-imgsubmit.oss-cn-hangzhou.aliyuncs.com/img/202111112241065.jpg');
INSERT INTO "SYSTEM"."T_BOOK_INFO" VALUES ('2', '红楼梦', '曹雪芹', '36', '3', '《红楼梦》是一部百科全书式的长篇小说。以宝黛爱情悲剧为主线,以四大家族的荣辱兴衰为背景,描绘出18世纪中国封建社会的方方面面。', '0', 'http://fluu-imgsubmit.oss-cn-hangzhou.aliyuncs.com/img/202111112140064.jpg');
INSERT INTO "SYSTEM"."T_BOOK_INFO" VALUES ('4', '西游记', '吴承恩', '60', '3', '《西游记》主要描写的是孙悟空保唐僧西天取经,历经九九八十一难的故事。唐僧取经是历史上一件真实的事。大约距今一千三百多年前,即唐太宗贞观元年(627),年仅25岁的青年和尚玄奘离开京城长安,只身到天竺(印度)游学。他从长安出发后,途经中亚、阿富汗、巴基斯坦,历尽艰难险阻,最后到达了印度。他在那里学习了两年多,并在一次大型佛教经学辩论会任主讲,受到了赞誉。', '0', 'http://fluu-imgsubmit.oss-cn-hangzhou.aliyuncs.com/img/202111112242308.jpg');
INSERT INTO "SYSTEM"."T_BOOK_INFO" VALUES ('5', '水浒传', '施耐庵', '50.6', '3', '《水浒传》是我国第一部以农民起义为题材的长篇章回小说,是我国文学史上一座巍然屹立的丰碑,也是世界文学宝库中一颗光彩夺目的明珠。数百年来,它一直深受我国人民的喜爱,并被译为多种文字,成为我国流传最为广泛的古代长篇小说之一。', '0', 'https://fluu-imgsubmit.oss-cn-hangzhou.aliyuncs.com/BookManager/pictures/1637228386001水浒传.jpg');
INSERT INTO "SYSTEM"."T_BOOK_INFO" VALUES ('12', '三国演义', '罗贯中', '42', '3', '《三国演义》又名《三国志演义》、《三国志通俗演义》,是我国小说史上最著名最杰出的长篇章回体历史小说。', '0', 'http://fluu-imgsubmit.oss-cn-hangzhou.aliyuncs.com/img/202111112143793.jpg');
INSERT INTO "SYSTEM"."T_BOOK_INFO" VALUES ('13', '三体(全集)', '刘慈欣', '92', '4', '三体三部曲 (《三体》《三体Ⅱ·黑暗森林》《三体Ⅲ·死神永生》) ,原名“地球往事三部曲”,是中国著名科幻作家刘慈欣的首个长篇系列。', '0', 'http://fluu-imgsubmit.oss-cn-hangzhou.aliyuncs.com/img/202111112143943.jpg');
INSERT INTO "SYSTEM"."T_BOOK_INFO" VALUES ('14', '天龙八部', '金庸', '58', '6', '天龙八部乃金笔下的一部长篇小说,与《射雕》,《神雕》等 几部长篇小说一起被称为可读性最高的金庸小说。《天龙》的故事情节曲折,内容丰富,也曾多次被改编为电视作品。', '0', 'http://fluu-imgsubmit.oss-cn-hangzhou.aliyuncs.com/img/202111112143125.jpg');
INSERT INTO "SYSTEM"."T_BOOK_INFO" VALUES ('27', '明朝那些事儿', '当年明月', '399', '2', '国民史学读本,持续风行十余年,畅销3000万册,全本白话正说明朝大历史', '0', 'https://fluu-imgsubmit.oss-cn-hangzhou.aliyuncs.com/BookManager/pictures/1637228686000明朝那些事儿.jpg');
INSERT INTO "SYSTEM"."T_BOOK_INFO" VALUES ('28', '沙丘', 'Frank Herbert', '394.9', '4', '每个“不可不读”的书单上都有《沙丘》!伟大的《沙丘》六部曲中文版初次完整出版!人类每次正视自己的渺小,都是自身的一次巨大进步。', '0', 'https://fluu-imgsubmit.oss-cn-hangzhou.aliyuncs.com/BookManager/pictures/1637228758971沙丘.jpg');
INSERT INTO "SYSTEM"."T_BOOK_INFO" VALUES ('30', 'C Primer Plus', '史蒂芬·普拉达', '90.5', '1', 'C语言入门教程,C语言程序设计籍,程序员的启蒙教材,针对C11标准库更新', '0', 'https://fluu-imgsubmit.oss-cn-hangzhou.aliyuncs.com/BookManager/pictures/1637224588022C.jpg');
INSERT INTO "SYSTEM"."T_BOOK_INFO" VALUES ('31', '计算机网络:自顶向下方法', 'James,F.Kurose', '73.4', '1', '以自顶向下的方式系统展现计算机网络的原理与结构,广受欢迎的计算机网络教材。', '0', 'https://fluu-imgsubmit.oss-cn-hangzhou.aliyuncs.com/BookManager/pictures/1637230839418计算机网络.jpg');
INSERT INTO "SYSTEM"."T_BOOK_INFO" VALUES ('32', '围城', '钱钟书', '30.2', '3', '《围城》是一幅栩栩如生的世井百态图,人生的酸甜苦辣千般滋味均在其中得到了淋漓尽致的体现。钱钟书先生将自己的语言天才并入极其渊博的知识,再添加上一些讽刺主义的幽默调料,以一书而定江山。《围城》显示给我们一个真正的聪明人是怎样看人生,又怎样用所有作家都必得使用的文字来表述自己的“观”和“感”的。', '0', 'https://fluu-imgsubmit.oss-cn-hangzhou.aliyuncs.com/BookManager/pictures/1637228900554围城.jpg');
INSERT INTO "SYSTEM"."T_BOOK_INFO" VALUES ('33', '平凡的世界', '路遥', '101.8', '3', '人生路遥,但没有白走的路;在平凡的世界里,照样可以活得丰富而精彩。《平凡的世界》激励了一代又一代青年人向上向善、自强不息,产生了广泛而深远的社会影响。读者从路遥身上获取励志的力量,正在于他的作品始终充盈着奋斗、激扬着拼搏,这是作品的魂魄,更是他人生的真实写照。', '0', 'https://fluu-imgsubmit.oss-cn-hangzhou.aliyuncs.com/BookManager/pictures/1637228780984平凡的世界.jpg');
INSERT INTO "SYSTEM"."T_BOOK_INFO" VALUES ('34', '哈利波特', 'J.K.罗琳', '648', '6', '本书生动幽默,感人至深,而罗琳的创作经历就像这个故事本身一样令人印象深刻。与哈利·波特一样,J.K.罗琳的内心深藏着魔法。', '0', 'https://fluu-imgsubmit.oss-cn-hangzhou.aliyuncs.com/BookManager/pictures/1637228304016哈利波特.jpg');
INSERT INTO "SYSTEM"."T_BOOK_INFO" VALUES ('36', '新概念英语1', '亚历山大', '41.85', '7', '全新的教学理念、有趣的课文内容、全面的技能训练,提供完整、经过实践检验的英语学习体系!', '0', 'https://fluu-imgsubmit.oss-cn-hangzhou.aliyuncs.com/BookManager/pictures/1637228199551新概念英语1.jpg');
INSERT INTO "SYSTEM"."T_BOOK_INFO" VALUES ('37', '新概念英语2', '亚历山大', '47.25', '7', '全新的教学理念、有趣的课文内容、全面的技能训练,提供完整、经过实践检验的英语学习体系!', '0', 'https://fluu-imgsubmit.oss-cn-hangzhou.aliyuncs.com/BookManager/pictures/1637228195386新概念英语2.jpg');
INSERT INTO "SYSTEM"."T_BOOK_INFO" VALUES ('38', '新概念英语3', '亚历山大', '46.5', '7', '全新的教学理念、有趣的课文内容、全面的技能训练,提供完整、经过实践检验的英语学习体系!', '0', 'https://fluu-imgsubmit.oss-cn-hangzhou.aliyuncs.com/BookManager/pictures/1637228191325新概念英语3.jpg');
INSERT INTO "SYSTEM"."T_BOOK_INFO" VALUES ('100', '红楼梦123', '曹雪芹', '35.5', '3', '为闺阁立传', '0', 'http://fluu-imgsubmit.oss-cn-hangzhou.aliyuncs.com/img/202111131322401.jpg');
INSERT INTO "SYSTEM"."T_BOOK_INFO" VALUES ('102', '红楼梦', '曹雪芹', '35.5', '3', '为闺阁立传', '0', 'http://fluu-imgsubmit.oss-cn-hangzhou.aliyuncs.com/img/202111131322401.jpg');


-- =============================================================================
-- 三、主键约束(Primary Key)
-- =============================================================================
-- 约束名 PK_T_BOOK_INFO:保证 BOOKID 唯一且非空;Oracle 会维护对应唯一索引以加速按主键查找。
ALTER TABLE "SYSTEM"."T_BOOK_INFO" ADD CONSTRAINT "PK_T_BOOK_INFO" PRIMARY KEY ("BOOKID");


-- =============================================================================
-- 四、序列(Sequence):SEQ_T_BOOK_INFO
-- =============================================================================
-- 匿名块:若序列已存在则 DROP,不存在则忽略 ORA-02289(对象不存在),避免重复执行脚本失败。
BEGIN
EXECUTE IMMEDIATE 'DROP SEQUENCE "SYSTEM"."SEQ_T_BOOK_INFO"';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -2289 THEN
RAISE;
END IF;
END;
/

-- 序列定义:供触发器或应用取 NEXTVAL 生成新 BOOKID。
CREATE SEQUENCE "SYSTEM"."SEQ_T_BOOK_INFO"
MINVALUE 1 -- 序列可产生的最小值
MAXVALUE 99999999 -- 最大值上限(达上限后的行为由 NOCYCLE/CYCLE 决定,此处默认 NOCYCLE)
START WITH 100 -- 起始值;与现有最大 BOOKID 对齐,避免与历史数据主键冲突
INCREMENT BY 1 -- 步长
CACHE 20; -- 缓存个数,提高高并发下取号性能;实例崩溃可能产生“跳号”(一般可接受)


-- =============================================================================
-- 五、触发器(Trigger):插入前自动赋 BOOKID
-- =============================================================================
-- TRG_T_BOOK_INFO_BI:BEFORE INSERT + FOR EACH ROW,插入每一行前执行。
-- 若应用插入时未提供 BOOKID(NULL),则用序列下一个值填充,实现“自增主键”效果。
CREATE OR REPLACE TRIGGER "SYSTEM"."TRG_T_BOOK_INFO_BI"
BEFORE INSERT ON "SYSTEM"."T_BOOK_INFO"
FOR EACH ROW
BEGIN
IF :NEW."BOOKID" IS NULL THEN
SELECT "SYSTEM"."SEQ_T_BOOK_INFO".NEXTVAL INTO :NEW."BOOKID" FROM DUAL;
END IF;
END;
/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*
* T_BOOK_TYPE.sql
*/


-- ----------------------------
-- Table structure for T_BOOK_TYPE
-- ----------------------------
DROP TABLE "SYSTEM"."T_BOOK_TYPE";
CREATE TABLE "SYSTEM"."T_BOOK_TYPE" (
"BOOKTYPEID" NUMBER NOT NULL,
"BOOKTYPENAME" VARCHAR2(254 BYTE) NOT NULL,
"BOOKTYPEDESC" VARCHAR2(254 BYTE) NOT NULL
)
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;

-- ----------------------------
-- Records of T_BOOK_TYPE
-- ----------------------------
INSERT INTO "SYSTEM"."T_BOOK_TYPE" VALUES ('1', '计算机科学', '计算机相关');
INSERT INTO "SYSTEM"."T_BOOK_TYPE" VALUES ('2', '历史', '历史相关');
INSERT INTO "SYSTEM"."T_BOOK_TYPE" VALUES ('3', '文学', '文学相关');
INSERT INTO "SYSTEM"."T_BOOK_TYPE" VALUES ('4', '科幻', '科幻相关');
INSERT INTO "SYSTEM"."T_BOOK_TYPE" VALUES ('6', '小说', '小说相关');
INSERT INTO "SYSTEM"."T_BOOK_TYPE" VALUES ('7', '外语', '外语相关');

-- ----------------------------
-- Primary Key structure for table T_BOOK_TYPE
-- ----------------------------
ALTER TABLE "SYSTEM"."T_BOOK_TYPE" ADD CONSTRAINT "PK_T_BOOK_TYPE" PRIMARY KEY ("BOOKTYPEID");

-- ----------------------------
-- Sequence for T_BOOK_TYPE
-- ----------------------------
BEGIN
EXECUTE IMMEDIATE 'DROP SEQUENCE "SYSTEM"."SEQ_T_BOOK_TYPE"';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -2289 THEN
RAISE;
END IF;
END;
/

CREATE SEQUENCE "SYSTEM"."SEQ_T_BOOK_TYPE"
MINVALUE 1
MAXVALUE 99999999
START WITH 100
INCREMENT BY 1
CACHE 20;

-- ----------------------------
-- Trigger for T_BOOK_TYPE
-- ----------------------------
CREATE OR REPLACE TRIGGER "SYSTEM"."TRG_T_BOOK_TYPE_BI"
BEFORE INSERT ON "SYSTEM"."T_BOOK_TYPE"
FOR EACH ROW
BEGIN
IF :NEW."BOOKTYPEID" IS NULL THEN
SELECT "SYSTEM"."SEQ_T_BOOK_TYPE".NEXTVAL INTO :NEW."BOOKTYPEID" FROM DUAL;
END IF;
END;
/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*
* T_BORROW.sql
*/


-- ----------------------------
-- Table structure for T_BORROW
-- ----------------------------
DROP TABLE "SYSTEM"."T_BORROW";
CREATE TABLE "SYSTEM"."T_BORROW" (
"BORROWID" NUMBER NOT NULL,
"USERID" NUMBER NOT NULL,
"BOOKID" NUMBER NOT NULL,
"BORROWTIME" DATE NOT NULL,
"RETURNTIME" DATE
)
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;

-- ----------------------------
-- Records of T_BORROW
-- ----------------------------
INSERT INTO "SYSTEM"."T_BORROW" VALUES ('26', '11', '2', TO_DATE('2021-11-18 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), TO_DATE('2021-11-18 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO "SYSTEM"."T_BORROW" VALUES ('27', '11', '1', TO_DATE('2021-11-18 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), TO_DATE('2021-11-18 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO "SYSTEM"."T_BORROW" VALUES ('28', '11', '4', TO_DATE('2021-11-18 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), TO_DATE('2021-11-18 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO "SYSTEM"."T_BORROW" VALUES ('30', '14', '2', TO_DATE('2021-11-18 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), TO_DATE('2021-11-19 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO "SYSTEM"."T_BORROW" VALUES ('32', '14', '4', TO_DATE('2021-11-18 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), TO_DATE('2021-11-18 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO "SYSTEM"."T_BORROW" VALUES ('38', '14', '1', TO_DATE('2021-11-19 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), TO_DATE('2021-11-19 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO "SYSTEM"."T_BORROW" VALUES ('39', '14', '1', TO_DATE('2021-11-19 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), TO_DATE('2021-11-19 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO "SYSTEM"."T_BORROW" VALUES ('40', '14', '1', TO_DATE('2021-11-19 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), TO_DATE('2021-11-19 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO "SYSTEM"."T_BORROW" VALUES ('101', '14', '2', TO_DATE('2021-12-04 15:00:00', 'SYYYY-MM-DD HH24:MI:SS'), TO_DATE('2021-12-04 15:00:06', 'SYYYY-MM-DD HH24:MI:SS'));

-- ----------------------------
-- Primary Key structure for table T_BORROW
-- ----------------------------
ALTER TABLE "SYSTEM"."T_BORROW" ADD CONSTRAINT "PK_T_BORROW" PRIMARY KEY ("BORROWID");

-- ----------------------------
-- Sequence for T_BORROW
-- ----------------------------
BEGIN
EXECUTE IMMEDIATE 'DROP SEQUENCE "SYSTEM"."SEQ_T_BORROW"';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -2289 THEN
RAISE;
END IF;
END;
/

CREATE SEQUENCE "SYSTEM"."SEQ_T_BORROW"
MINVALUE 1
MAXVALUE 99999999
START WITH 100
INCREMENT BY 1
CACHE 20;

-- ----------------------------
-- Trigger for T_BORROW
-- ----------------------------
CREATE OR REPLACE TRIGGER "SYSTEM"."TRG_T_BORROW_BI"
BEFORE INSERT ON "SYSTEM"."T_BORROW"
FOR EACH ROW
BEGIN
IF :NEW."BORROWID" IS NULL THEN
SELECT "SYSTEM"."SEQ_T_BORROW".NEXTVAL INTO :NEW."BORROWID" FROM DUAL;
END IF;
END;
/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/*
* T_USER.sql
*/


-- ----------------------------
-- Table structure for T_USER
-- ----------------------------
DROP TABLE "SYSTEM"."T_USER";
CREATE TABLE "SYSTEM"."T_USER" (
"USERID" NUMBER NOT NULL,
"USERNAME" VARCHAR2(254 BYTE) NOT NULL,
"USERPASSWORD" VARCHAR2(254 BYTE) NOT NULL,
"ISADMIN" NUMBER NOT NULL
)
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;

-- ----------------------------
-- Records of T_USER
-- ----------------------------
INSERT INTO "SYSTEM"."T_USER" VALUES ('1', 'admin', 'admin', '1');
INSERT INTO "SYSTEM"."T_USER" VALUES ('2', '李明', '123456', '0');
INSERT INTO "SYSTEM"."T_USER" VALUES ('11', 'zhang', '123', '0');
INSERT INTO "SYSTEM"."T_USER" VALUES ('13', 'zhao', 'abc', '1');
INSERT INTO "SYSTEM"."T_USER" VALUES ('14', 'fluu', '123456', '0');
INSERT INTO "SYSTEM"."T_USER" VALUES ('15', 'wp123', 'wp456', '1');
INSERT INTO "SYSTEM"."T_USER" VALUES ('16', 'wp123', 'wp456', '1');

-- ----------------------------
-- Primary Key structure for table T_USER
-- ----------------------------
ALTER TABLE "SYSTEM"."T_USER" ADD CONSTRAINT "PK_T_USER" PRIMARY KEY ("USERID");

-- ----------------------------
-- Sequence for T_USER
-- ----------------------------
BEGIN
EXECUTE IMMEDIATE 'DROP SEQUENCE "SYSTEM"."SEQ_T_USER"';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -2289 THEN
RAISE;
END IF;
END;
/

CREATE SEQUENCE "SYSTEM"."SEQ_T_USER"
MINVALUE 1
MAXVALUE 99999999
START WITH 100
INCREMENT BY 1
CACHE 20;

-- ----------------------------
-- Trigger for T_USER
-- ----------------------------
CREATE OR REPLACE TRIGGER "SYSTEM"."TRG_T_USER_BI"
BEFORE INSERT ON "SYSTEM"."T_USER"
FOR EACH ROW
BEGIN
IF :NEW."USERID" IS NULL THEN
SELECT "SYSTEM"."SEQ_T_USER".NEXTVAL INTO :NEW."USERID" FROM DUAL;
END IF;
END;
/