forked from dongxuyang1985/postgresql_dev_guide
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path01_create_table.sql
More file actions
72 lines (68 loc) · 2.35 KB
/
Copy path01_create_table.sql
File metadata and controls
72 lines (68 loc) · 2.35 KB
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
-- 部门信息表
CREATE TABLE departments
( department_id INTEGER NOT NULL -- 部门编号,主键
, department_name CHARACTER VARYING(30) NOT NULL -- 部门名称
, manager_id INTEGER -- 部门经理的员工编号
, location_id INTEGER -- 部门所在位置编号
, CONSTRAINT dept_id_pk PRIMARY KEY (department_id)
) ;
-- 职位信息表
CREATE TABLE jobs
( job_id CHARACTER VARYING(10) NOT NULL -- 职位编号,主键
, job_title CHARACTER VARYING(35) NOT NULL -- 职位名称
, min_salary INTEGER -- 最低月薪
, max_salary INTEGER -- 最高月薪
, CONSTRAINT job_id_pk PRIMARY KEY(job_id)
) ;
-- 员工信息表
CREATE TABLE employees
( employee_id INTEGER NOT NULL -- 员工编号,主键
, first_name CHARACTER VARYING(20) -- 名字
, last_name CHARACTER VARYING(25) NOT NULL -- 姓氏
, email CHARACTER VARYING(25) NOT NULL -- 邮箱
, phone_number CHARACTER VARYING(20) -- 电话号码
, hire_date DATE NOT NULL -- 入职日期
, job_id CHARACTER VARYING(10) NOT NULL -- 职位编号
, salary NUMERIC(8,2) -- 月薪
, commission_pct NUMERIC(2,2) -- 销售提成百分比
, manager_id INTEGER -- 经理
, department_id INTEGER -- 部门编号
, CONSTRAINT emp_emp_id_pk PRIMARY KEY (employee_id)
, CONSTRAINT emp_salary_min CHECK (salary > 0)
, CONSTRAINT emp_email_uk UNIQUE (email)
, CONSTRAINT emp_dept_fk FOREIGN KEY (department_id) REFERENCES departments(department_id)
, CONSTRAINT emp_job_fk FOREIGN KEY (job_id) REFERENCES jobs(job_id)
, CONSTRAINT emp_manager_fk FOREIGN KEY (manager_id) REFERENCES employees(employee_id)
) ;
ALTER TABLE departments ADD CONSTRAINT dept_mgr_fk FOREIGN KEY (manager_id) REFERENCES employees(employee_id);
-- 员工详细信息视图
CREATE VIEW emp_details_view
(employee_id,
job_id,
manager_id,
department_id,
location_id,
first_name,
last_name,
salary,
commission_pct,
department_name,
job_title)
AS SELECT
e.employee_id,
e.job_id,
e.manager_id,
e.department_id,
d.location_id,
e.first_name,
e.last_name,
e.salary,
e.commission_pct,
d.department_name,
j.job_title
FROM
employees e,
departments d,
jobs j
WHERE e.department_id = d.department_id
AND j.job_id = e.job_id;