diff --git "a/\344\275\231\346\266\233/20241022 \347\273\203\344\271\240/OADatabase.sql" "b/\344\275\231\346\266\233/20241022 \347\273\203\344\271\240/OADatabase.sql" new file mode 100644 index 0000000000000000000000000000000000000000..794b38a8bcb42961744d4325b19f1fb8a8c6f67b --- /dev/null +++ "b/\344\275\231\346\266\233/20241022 \347\273\203\344\271\240/OADatabase.sql" @@ -0,0 +1,196 @@ +create database test; +use test; +-- 二、综合题 +-- 1. 描述(10分) +-- 针对如下表Author结构创建索引,写出创建索引的SQL语句: +CREATE TABLE Author +( + Id int PRIMARY KEY, + FirstName varchar(45) NOT NULL, + LastName varchar(45) NOT NULL, + UpdatedTime datetime NOT NULL +); +-- 对FirstName创建唯一索引uniq_idx_firstname,对LastName创建普通索引idx_lastname +-- 答题区: +-- ----------------------------------------------------------------- +create unique index uniq_idx_firstname on Author (FirstName); +create index idx_lastname on Author (LastName); +-- ----------------------------------------------------------------- + +-- 2. 描述(15分) +-- 构造一个触发器trg_AuditLog,在向Employees表中插入一条数据的时候,触发插入相关的数据到AuditLog中。 +-- -- 职员表 +CREATE TABLE Employees +( + Id INT PRIMARY KEY auto_increment, + Name varchar(80) NOT NULL, + Age INT NOT NULL, + Address varchar(50), + SALARY decimal(18, 2) +); +-- -- 审计日志表 +CREATE TABLE AuditLog +( + Id int primary key auto_increment, + NAME TEXT NOT NULL, + Salary decimal(18, 2) +); +-- 写好触发器后,往Employees插入一条数据: +INSERT INTO Employees (NAME, AGE, ADDRESS, SALARY) +VALUES ('Paul', 32, 'California', 20000.00); +-- 然后从AuditLog里面使用查询语句: +select NAME, Salary +from AuditLog; +-- 会输出: +-- mysql> select NAME,Salary from AuditLog; +-- +------+----------+ +-- | NAME | Salary | +-- +------+----------+ +-- | Paul | 20000.00 | +-- +------+----------+ + +-- 答题区: +-- ----------------------------------------------------------------- +create trigger trg_AuditLog + after insert + on Employees + for each row + insert into Auditlog(NAME, SALARY) + values (new.NAME, new.SALARY); +-- ----------------------------------------------------------------- + +-- 3. 描述(10分) +-- 针对Author表创建视图vw_Author,只包含FirstName以及LastName两列,并对这两列重新命名,FirstName为v_FirstName,LastName修改为v_LastName: +-- 先往Author表插入2条测试数据: +insert into Author +values (1, 'PENELOPE', 'GUINESS', '2006-02-15 12:34:33'), + (2, 'NICK', 'WAHLBERG', '2006-02-15 12:34:33'); +-- 查询视图:select * from vw_Author; +-- 输出: +-- +-------------+------------+ +-- | v_FirstName | v_LastName | +-- +-------------+------------+ +-- | PENELOPE | GUINESS | +-- | NICK | WAHLBERG | +-- +-------------+------------+ +-- 答题区: +-- ----------------------------------------------------------------- +create view vw_Author as +select FirstName v_FirstName, LastName v_LastName +from Author; +-- ----------------------------------------------------------------- + +-- 4. 描述(10分) +-- 使用以下数据,完成相关操作 +-- -- 新建表 +CREATE TABLE user +( + Id int primary key auto_increment, + UserCode varchar(80), + Birthday date NOT NULL, + FirstName varchar(14) NOT NULL, + LastName varchar(16) NOT NULL, + Gender char(1) NOT NULL, + HireDate date NOT NULL +); +-- 插入一些数据: +INSERT INTO `user` (UserCode, Birthday, FirstName, LastName, Gender, HireDate) +VALUES ('10001', '1953-09-02', 'Georgi', 'Facello', 'M', '1986-06-26'); +INSERT INTO `user` (UserCode, Birthday, FirstName, LastName, Gender, HireDate) +VALUES ('10002', '1964-06-02', 'Bezalel', 'Simmel', 'F', '1985-11-21'); +INSERT INTO `user` (UserCode, Birthday, FirstName, LastName, Gender, HireDate) +VALUES ('10003', '1959-12-03', 'Parto', 'Bamford', 'M', '1986-08-28'); +INSERT INTO `user` (UserCode, Birthday, FirstName, LastName, Gender, HireDate) +VALUES ('10004', '1954-05-01', 'Chirstian', 'Koblick', 'M', '1986-12-01'); +INSERT INTO `user` (UserCode, Birthday, FirstName, LastName, Gender, HireDate) +VALUES ('10005', '1955-01-21', 'Kyoichi', 'Maliniak', 'M', '1989-09-12'); +INSERT INTO `user` (UserCode, Birthday, FirstName, LastName, Gender, HireDate) +VALUES ('10006', '1953-04-20', 'Anneke', 'Preusig', 'F', '1989-06-02'); +INSERT INTO `user` (UserCode, Birthday, FirstName, LastName, Gender, HireDate) +VALUES ('10007', '1957-05-23', 'Tzvetan', 'Zielinski', 'F', '1989-02-10'); +INSERT INTO `user` (UserCode, Birthday, FirstName, LastName, Gender, HireDate) +VALUES ('10008', '1958-02-19', 'Saniya', 'Kalloufi', 'M', '1994-09-15'); +INSERT INTO `user` (UserCode, Birthday, FirstName, LastName, Gender, HireDate) +VALUES ('10009', '1952-04-19', 'Sumant', 'Peac', 'F', '1985-02-18'); +INSERT INTO `user` (UserCode, Birthday, FirstName, LastName, Gender, HireDate) +VALUES ('10010', '1963-06-01', 'Duangkaew', 'Piveteau', 'F', '1989-08-24'); +INSERT INTO `user` (UserCode, Birthday, FirstName, LastName, Gender, HireDate) +VALUES ('10011', '1953-11-07', 'Mary', 'Sluis', 'F', '1990-01-22'); +-- +-- 查询user表,实现以下显示效果: +-- +----------+------------+-----------+-----------+--------+------------+ +-- | UserCode | Birthday | FirstName | LastName | Gender | HireDate | +-- +----------+------------+-----------+-----------+--------+------------+ +-- | 10001 | 1953-09-02 | Georgi | Facello | 女 | 1986-06-26 | +-- | 10002 | 1964-06-02 | Bezalel | Simmel | 男 | 1985-11-21 | +-- | 10003 | 1959-12-03 | Parto | Bamford | 女 | 1986-08-28 | +-- | 10004 | 1954-05-01 | Chirstian | Koblick | 女 | 1986-12-01 | +-- | 10005 | 1955-01-21 | Kyoichi | Maliniak | 女 | 1989-09-12 | +-- | 10006 | 1953-04-20 | Anneke | Preusig | 男 | 1989-06-02 | +-- | 10007 | 1957-05-23 | Tzvetan | Zielinski | 男 | 1989-02-10 | +-- | 10008 | 1958-02-19 | Saniya | Kalloufi | 女 | 1994-09-15 | +-- | 10009 | 1952-04-19 | Sumant | Peac | 男 | 1985-02-18 | +-- | 10010 | 1963-06-01 | Duangkaew | Piveteau | 男 | 1989-08-24 | +-- | 10011 | 1953-11-07 | Mary | Sluis | 男 | 1990-01-22 | +-- +----------+------------+-----------+-----------+--------+------------+ + +-- 答题区: +-- ----------------------------------------------------------------- +select UserCode, Birthday, FirstName, LastName, if(Gender = 'F', '男', '女') Gender, HireDate +from user; +-- ----------------------------------------------------------------- + + +-- 5. 描述(30分) +-- 开发组收到M公司的开发邀约,拟开发一套OA办公自动化系统,该系统的部分功能及初步需求分析的结果如下 : +-- +-- ``` +-- 部门:部门号、部门名、主管、联系电话、邮箱 +-- 员工:工号、姓名、职位、手机号码、薪资 +-- 用户:用户号、用户名、银行账号、手机号码、联系地址 +-- 用户申请:申请号、用户号、会议日期、天数、参会人数、地点、预算和受理标志 +-- ``` +-- +-- (1)M公司旗下有业务部、策划部和其他部门。每个部门只有一名主管,只负责管理本部门的工作,且主管参照员工关系的员工号;一个部门有多名员工,每名员工属于且仅属于一个部门。 +-- +-- (2)员工职位包括主管、业务员、 策划员等。业务员负责受理用户申请,设置受理标志。一名业务员可以受理多个用户申请,但一个用户申请只能由一名业务员受理。 +-- +-- (3)用户号唯一标识用户信息中的每一个用户。 +-- +-- (4)用户申请信息的受理标志有:已申请(默认)、已拒绝、已受理、延期受理、已过期。申请号唯一标识用户申请信息中的每一个申请,且一个用户可以提交多个申请,但一个用户申请只对应一个用户号。 +-- +-- 題目1(10分):使用PowerDesigner,设计可以使用的数据库物理模型,要求中文名称和英文名称清楚(英文不知道的可以借助翻译软件),表关系准确;利用设计好的模型生成sql语句,创建一个名为OADatabase的数据库,备用; +-- 题目2(10分):为了保证当用户申请会议,受理标志为 已申请,请设计一个触发器,当用户申请信息表插入数据的时候,可以判断其默认受理标志是否为:已申请,如果是,则无需处理允许正常插入,如果不是则重新个性受理标志为:已申请; + +-- 答题区: +-- ----------------------------------------------------------------- +create database OADatabase; +use OADatabase; +delimiter $$ +create trigger trg_apply + before insert + on apply + for each row + if new.sign != '已申请' then + set new.sign = '已申请'; + end if; +delimiter ; +-- ----------------------------------------------------------------- + +-- 题目3(10分):当业务员受理用户申请的时候,需要将当前处理的记录中受理标志修改为:已受理,同时将其它所有状态为:已申请,且会议日期已超过的记录中的受理标志个性为:已过期,请设计一个存储过程来处理此业务; + +-- 答题区: +-- ----------------------------------------------------------------- +delimiter $$ +create procedure up(in e_id int) +begin + update apply set sign='已受理' where emp_id = e_id and con_date > curdate(); + update apply + set sign='已过期' + where emp_id = e_id + and sign = '已申请' + and con_date < curdate(); +end; +delimiter ; +-- ----------------------------------------------------------------- + diff --git "a/\344\275\231\346\266\233/20241022 \347\273\203\344\271\240/OA\345\212\236\345\205\254\350\207\252\345\212\250\345\214\226\347\263\273\347\273\237.sql" "b/\344\275\231\346\266\233/20241022 \347\273\203\344\271\240/OA\345\212\236\345\205\254\350\207\252\345\212\250\345\214\226\347\263\273\347\273\237.sql" new file mode 100644 index 0000000000000000000000000000000000000000..3aa214ce43908f2e248272b687a73753290bf7f2 --- /dev/null +++ "b/\344\275\231\346\266\233/20241022 \347\273\203\344\271\240/OA\345\212\236\345\205\254\350\207\252\345\212\250\345\214\226\347\263\273\347\273\237.sql" @@ -0,0 +1,79 @@ +/*==============================================================*/ +/* DBMS name: MySQL 5.0 */ +/* Created on: 2024-10-22 15:24:20 */ +/*==============================================================*/ + + +drop table if exists apply; + +drop table if exists dept; + +drop table if exists emp; + +drop table if exists user; + +/*==============================================================*/ +/* Table: apply */ +/*==============================================================*/ +create table apply +( + app_id int not null, + emp_id int not null, + user_id int not null, + con_date date, + day int, + num int, + place varchar(50), + sign varchar(50), + primary key (app_id) +); + +/*==============================================================*/ +/* Table: dept */ +/*==============================================================*/ +create table dept +( + dept_id int not null, + dept_name varchar(50), + charge varchar(50), + phone varchar(50), + email varchar(50), + primary key (dept_id) +); + +/*==============================================================*/ +/* Table: emp */ +/*==============================================================*/ +create table emp +( + emp_id int not null, + dept_id int not null, + emp_name varchar(50), + position varchar(50), + phone varchar(50), + salary decimal(50,2), + primary key (emp_id) +); + +/*==============================================================*/ +/* Table: user */ +/*==============================================================*/ +create table user +( + user_id int not null, + user_name varchar(50), + bank_acc varchar(50), + phone varchar(50), + address varchar(50), + primary key (user_id) +); + +alter table apply add constraint FK_emp_app foreign key (emp_id) + references emp (emp_id) on delete restrict on update restrict; + +alter table apply add constraint FK_user_app foreign key (user_id) + references user (user_id) on delete restrict on update restrict; + +alter table emp add constraint FK_dept_emp foreign key (dept_id) + references dept (dept_id) on delete restrict on update restrict; + diff --git "a/\344\275\231\346\266\233/20241022 \347\273\203\344\271\240/\346\246\202\345\277\265\346\250\241\345\236\213.PNG" "b/\344\275\231\346\266\233/20241022 \347\273\203\344\271\240/\346\246\202\345\277\265\346\250\241\345\236\213.PNG" new file mode 100644 index 0000000000000000000000000000000000000000..3d25406081cfdac31fd5f3db26eabac8e49d2552 Binary files /dev/null and "b/\344\275\231\346\266\233/20241022 \347\273\203\344\271\240/\346\246\202\345\277\265\346\250\241\345\236\213.PNG" differ diff --git "a/\344\275\231\346\266\233/20241022 \347\273\203\344\271\240/\347\211\251\347\220\206\346\250\241\345\236\213.PNG" "b/\344\275\231\346\266\233/20241022 \347\273\203\344\271\240/\347\211\251\347\220\206\346\250\241\345\236\213.PNG" new file mode 100644 index 0000000000000000000000000000000000000000..172785bd1dd590a021df959dcb7023d6389d65d0 Binary files /dev/null and "b/\344\275\231\346\266\233/20241022 \347\273\203\344\271\240/\347\211\251\347\220\206\346\250\241\345\236\213.PNG" differ diff --git "a/\344\275\231\346\266\233/20241022 \347\273\203\344\271\240/\347\273\274\345\220\210\351\242\2302.md" "b/\344\275\231\346\266\233/20241022 \347\273\203\344\271\240/\347\273\274\345\220\210\351\242\2302.md" new file mode 100644 index 0000000000000000000000000000000000000000..c2e057f4cee910e5a6c32c3da675038365ec2799 --- /dev/null +++ "b/\344\275\231\346\266\233/20241022 \347\273\203\344\271\240/\347\273\274\345\220\210\351\242\2302.md" @@ -0,0 +1,153 @@ +```sql +# 二、综合题 +-- 1. 描述(10分) +-- 针对如下表Author结构创建索引,写出创建索引的SQL语句: +CREATE TABLE Author +( + Id int PRIMARY KEY , + FirstName varchar(45) NOT NULL, + LastName varchar(45) NOT NULL, + UpdatedTime datetime NOT NULL + ) +-- 对FirstName创建唯一索引uniq_idx_firstname,对LastName创建普通索引idx_lastname +# 答题区: +-- ----------------------------------------------------------------- + +-- ----------------------------------------------------------------- + +-- 2. 描述(15分) +-- 构造一个触发器trg_AuditLog,在向Employees表中插入一条数据的时候,触发插入相关的数据到AuditLog中。 +-- -- 职员表 +CREATE TABLE Employees +( + Id INT PRIMARY KEY auto_increment, + Name varchar(80) NOT NULL, + Age INT NOT NULL, + Address varchar(50), + SALARY decimal(18,2) +); +-- -- 审计日志表 +CREATE TABLE AuditLog +( + Id int primary key auto_increment, + NAME TEXT NOT NULL, + Salary decimal(18,2) +); +-- 写好触发器后,往Employees插入一条数据: +INSERT INTO Employees (NAME,AGE,ADDRESS,SALARY)VALUES ('Paul', 32, 'California', 20000.00 ); +-- 然后从AuditLog里面使用查询语句: +select NAME,Salary from AuditLog; +-- 会输出: +mysql> select NAME,Salary from AuditLog; ++------+----------+ +| NAME | Salary | ++------+----------+ +| Paul | 20000.00 | ++------+----------+ + +# 答题区: +-- ----------------------------------------------------------------- + +-- ----------------------------------------------------------------- + +-- 3. 描述(10分) +-- 针对Author表创建视图vw_Author,只包含FirstName以及LastName两列,并对这两列重新命名,FirstName为v_FirstName,LastName修改为v_LastName: +-- 先往Author表插入2条测试数据: +insert into Author values (1,'PENELOPE', 'GUINESS', '2006-02-15 12:34:33'), (2,'NICK', 'WAHLBERG', '2006-02-15 12:34:33'); +-- 查询视图:select * from vw_Author; +-- 输出: ++-------------+------------+ +| v_FirstName | v_LastName | ++-------------+------------+ +| PENELOPE | GUINESS | +| NICK | WAHLBERG | ++-------------+------------+ +# 答题区: +-- ----------------------------------------------------------------- + +-- ----------------------------------------------------------------- + +-- 4. 描述(10分) +-- 使用以下数据,完成相关操作 +-- -- 新建表 +CREATE TABLE user +( + Id int primary key auto_increment, + UserCode varchar(80), + Birthday date NOT NULL, + FirstName varchar(14) NOT NULL, + LastName varchar(16) NOT NULL, + Gender char(1) NOT NULL, + HireDate date NOT NULL +); +# 插入一些数据: +INSERT INTO `user` (UserCode,Birthday,FirstName,LastName,Gender,HireDate) VALUES('10001','1953-09-02','Georgi','Facello','M','1986-06-26'); +INSERT INTO `user` (UserCode,Birthday,FirstName,LastName,Gender,HireDate) VALUES('10002','1964-06-02','Bezalel','Simmel','F','1985-11-21'); +INSERT INTO `user` (UserCode,Birthday,FirstName,LastName,Gender,HireDate) VALUES('10003','1959-12-03','Parto','Bamford','M','1986-08-28'); +INSERT INTO `user` (UserCode,Birthday,FirstName,LastName,Gender,HireDate) VALUES('10004','1954-05-01','Chirstian','Koblick','M','1986-12-01'); +INSERT INTO `user` (UserCode,Birthday,FirstName,LastName,Gender,HireDate) VALUES('10005','1955-01-21','Kyoichi','Maliniak','M','1989-09-12'); +INSERT INTO `user` (UserCode,Birthday,FirstName,LastName,Gender,HireDate) VALUES('10006','1953-04-20','Anneke','Preusig','F','1989-06-02'); +INSERT INTO `user` (UserCode,Birthday,FirstName,LastName,Gender,HireDate) VALUES('10007','1957-05-23','Tzvetan','Zielinski','F','1989-02-10'); +INSERT INTO `user` (UserCode,Birthday,FirstName,LastName,Gender,HireDate) VALUES('10008','1958-02-19','Saniya','Kalloufi','M','1994-09-15'); +INSERT INTO `user` (UserCode,Birthday,FirstName,LastName,Gender,HireDate) VALUES('10009','1952-04-19','Sumant','Peac','F','1985-02-18'); +INSERT INTO `user` (UserCode,Birthday,FirstName,LastName,Gender,HireDate) VALUES('10010','1963-06-01','Duangkaew','Piveteau','F','1989-08-24'); +INSERT INTO `user` (UserCode,Birthday,FirstName,LastName,Gender,HireDate) VALUES('10011','1953-11-07','Mary','Sluis','F','1990-01-22'); +-- +-- 查询user表,实现以下显示效果: ++----------+------------+-----------+-----------+--------+------------+ +| UserCode | Birthday | FirstName | LastName | Gender | HireDate | ++----------+------------+-----------+-----------+--------+------------+ +| 10001 | 1953-09-02 | Georgi | Facello | 女 | 1986-06-26 | +| 10002 | 1964-06-02 | Bezalel | Simmel | 男 | 1985-11-21 | +| 10003 | 1959-12-03 | Parto | Bamford | 女 | 1986-08-28 | +| 10004 | 1954-05-01 | Chirstian | Koblick | 女 | 1986-12-01 | +| 10005 | 1955-01-21 | Kyoichi | Maliniak | 女 | 1989-09-12 | +| 10006 | 1953-04-20 | Anneke | Preusig | 男 | 1989-06-02 | +| 10007 | 1957-05-23 | Tzvetan | Zielinski | 男 | 1989-02-10 | +| 10008 | 1958-02-19 | Saniya | Kalloufi | 女 | 1994-09-15 | +| 10009 | 1952-04-19 | Sumant | Peac | 男 | 1985-02-18 | +| 10010 | 1963-06-01 | Duangkaew | Piveteau | 男 | 1989-08-24 | +| 10011 | 1953-11-07 | Mary | Sluis | 男 | 1990-01-22 | ++----------+------------+-----------+-----------+--------+------------+ + +# 答题区: +-- ----------------------------------------------------------------- + +-- ----------------------------------------------------------------- + + +-- 5. 描述(30分) +-- 开发组收到M公司的开发邀约,拟开发一套OA办公自动化系统,该系统的部分功能及初步需求分析的结果如下 : +-- +-- ``` +-- 部门:部门号、部门名、主管、联系电话、邮箱 +-- 员工:工号、姓名、职位、手机号码、薪资 +-- 用户:用户号、用户名、银行账号、手机号码、联系地址 +-- 用户申请:申请号、用户号、会议日期、天数、参会人数、地点、预算和受理标志 +-- ``` +-- +-- (1)M公司旗下有业务部、策划部和其他部门。每个部门只有一名主管,只负责管理本部门的工作,且主管参照员工关系的员工号;一个部门有多名员工,每名员工属于且仅属于一个部门。 +-- +-- (2)员工职位包括主管、业务员、 策划员等。业务员负责受理用户申请,设置受理标志。一名业务员可以受理多个用户申请,但一个用户申请只能由一名业务员受理。 +-- +-- (3)用户号唯一标识用户信息中的每一个用户。 +-- +-- (4)用户申请信息的受理标志有:已申请(默认)、已拒绝、已受理、延期受理、已过期。申请号唯一标识用户申请信息中的每一个申请,且一个用户可以提交多个申请,但一个用户申请只对应一个用户号。 +-- +-- 題目1(10分):使用PowerDesigner,设计可以使用的数据库物理模型,要求中文名称和英文名称清楚(英文不知道的可以借助翻译软件),表关系准确;利用设计好的模型生成sql语句,创建一个名为OADatabase的数据库,备用; +-- 题目2(10分):为了保证当用户申请会议,受理标志为 已申请,请设计一个触发器,当用户申请信息表插入数据的时候,可以判断其默认受理标志是否为:已申请,如果是,则无需处理允许正常插入,如果不是则重新个性受理标志为:已申请; + +# 答题区: +-- ----------------------------------------------------------------- + +-- ----------------------------------------------------------------- + +-- 题目3(10分):当业务员受理用户申请的时候,需要将当前处理的记录中受理标志修改为:已受理,同时将其它所有状态为:已申请,且会议日期已超过的记录中的受理标志个性为:已过期,请设计一个存储过程来处理此业务; + +# 答题区: +-- ----------------------------------------------------------------- + +-- ----------------------------------------------------------------- + + +``` \ No newline at end of file diff --git "a/\344\275\231\346\266\233/20241022 \347\273\203\344\271\240/\351\200\273\350\276\221\346\250\241\345\236\213.PNG" "b/\344\275\231\346\266\233/20241022 \347\273\203\344\271\240/\351\200\273\350\276\221\346\250\241\345\236\213.PNG" new file mode 100644 index 0000000000000000000000000000000000000000..5993de6e0836da5174349d874433d77276645ff1 Binary files /dev/null and "b/\344\275\231\346\266\233/20241022 \347\273\203\344\271\240/\351\200\273\350\276\221\346\250\241\345\236\213.PNG" differ