一、关系模型 1、关系 对于B校中的5个对象,分别建立属于每个对象的属性集合,具体属性描述如下: ● 学生(学号,姓名,性别,出生日期,入学日期,家庭住址) ● 教师(教师编
一、关系模型
1、关系
对于B校中的5个对象,分别建立属于每个对象的属性集合,具体属性描述如下:
● 学生(学号,姓名,性别,出生日期,入学日期,家庭住址)
● 教师(教师编号,教师姓名,职称,性别,年龄,入职日期)
● 班级(班级编号,班级名称,班主任)
● 院系(系编号,系名称,系主任)
● 课程(课程编号,课程名称,课程类型,学分)
上述属性对应的编号为:
● student(std_id,std_name,std_sex,std_birth,std_in,std_address)
● teacher(tec_id,tec_name,tec_job,tec_sex,tec_age,tec_in)
● class(cla_id,cla_name,cla_teacher)
●school_department(depart_id,depart_name,depart_teacher)
● course(cor_id,cor_name,cor_type,credit)
对象之间的关系:
● 一位学生可以选择多门课程,一门课程可被多名学生选择
● 一位老师可以选择多门课程,一门课程可被多名老师教授
● 一个院系可由多个班级组成
● 一个院系可聘请多名老师
● 一个班级可由多名学生组成
2、E-R图
二、学校数据模型表操作
1、表的创建
步骤 1 创建学生信息表。
DROP TABLE IF EXISTS student;
CREATE TABLE student
(
std_id INT PRIMARY KEY,
std_name NCHAR(20) NOT NULL,
std_sex NCHAR(6),
std_birth DATE,
std_in DATE NOT NULL,
std_address VARCHAR(100)
);
步骤 2 创建教师信息表。
DROP TABLE IF EXISTS teacher;
CREATE TABLE teacher
(
tec_id INT PRIMARY KEY,
tec_name CHAR(20) NOT NULL,
tec_job CHAR(15),
tec_sex CHAR(6),
tec_age INT,
tec_in DATE NOT NULL
);
步骤 3 创建班级信息表。
DROP TABLE IF EXISTS class;
CREATE TABLE class
(
cla_id INT PRIMARY KEY,
cla_name CHAR(20) NOT NULL,
cla_teacher INT NOT NULL
);
步骤 4 创建院系信息表。
DROP TABLE IF EXISTS school_department;
CREATE TABLE school_department
(
depart_id INT PRIMARY KEY,
depart_name NCHAR(30) NOT NULL,
depart_teacher INT NOT NULL
);
步骤 5 创建课程信息表。
DROP TABLE IF EXISTS course;
CREATE TABLE course
(
cor_id INT PRIMARY KEY,
cor_name NCHAR(30) NOT NULL,
cor_type NCHAR(20),
credit numeric
);
2、表数据的插入
步骤 1 向student表中插入数据。
INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (1,'张一','男','1993-01-01','2011-09-01','江苏省南京市雨花台区');
INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (2,'张二','男','1993-01-02','2011-09-01','江苏省南京市雨花台区');
INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (3,'张三','男','1993-01-03','2011-09-01','江苏省南京市雨花台区');
步骤 2 向teacher表中插入数据。
INSERT INTO teacher(tec_id,tec_name,tec_job,tec_sex,tec_age,tec_in) VALUES (1,'张一','讲师','男',35,'2009-07-01');
INSERT INTO teacher(tec_id,tec_name,tec_job,tec_sex,tec_age,tec_in) VALUES (2,'张二','讲师','男',35,'2009-07-01');
INSERT INTO teacher(tec_id,tec_name,tec_job,tec_sex,tec_age,tec_in) VALUES (3,'张三','讲师','男',35,'2009-07-01');
步骤 3 向class表插入数据。
INSERT INTO class(cla_id,cla_name,cla_teacher) VALUES (1,'计算机',1);
INSERT INTO class(cla_id,cla_name,cla_teacher) VALUES (2,'自动化',3);
INSERT INTO class(cla_id,cla_name,cla_teacher) VALUES (3,'飞行器设计',5);
步骤 4 向school_department表插入数据。
INSERT INTO school_department(depart_id,depart_name,depart_teacher) VALUES (1,'计算机学院',2);
INSERT INTO school_department(depart_id,depart_name,depart_teacher) VALUES (2,'自动化学院',4);
INSERT INTO school_department(depart_id,depart_name,depart_teacher) VALUES (3,'航空宇航学院',6);
步骤 5 向course表插入数据。
INSERT INTO course(cor_id,cor_name,cor_type,credit) VALUES (1,'数据库系统概论','必修',3);
INSERT INTO course(cor_id,cor_name,cor_type,credit) VALUES (2,'艺术设计概论','选修',1);
INSERT INTO course(cor_id,cor_name,cor_type,credit) VALUES (3,'力学制图','必修',4);
3、数据查询
单表查询
查询B校课程信息表的所有信息。
SELECT * from course;
条件查询
在教师信息表中查询教师编号大于45的老师的入学年份。
SELECT tec_id, tec_in FROM teacher WHERE tec_id>45;
查询B校中所有选修的课程的信息。
SELECT * FROM course WHERE cor_type='选修';
4、数据的修改和删除
修改数据
修改/更新课程信息表数据。
UPDATE course SET cor_name='C语言程序设计',cor_type='必修',credit=3.5 WHERE cor_id=1;
SELECT * FROM course WHERE cor_id=1;
删除指定数据
在B校中删除教师编号8和15所管理的院系。
DELETE FROM school_department WHERE depart_teacher=8 OR depart_teacher=15;
SELECT * FROM school_department;
附录一:openGauss数据库基本操作
查看帮助信息:
postgres=# \?
切换数据库:
\c dbname
切换用户:
\c – username
列举数据库:
使用\l元命令查看数据库系统的数据库列表。
\l
使用如下命令通过系统表pg_database查询数据库列表。
SELECT datname FROM pg_database;
列举表:
\dt
列举所有表、视图和索引:
\d+
使用gsql的\d+命令查询表的属性。
\d+ tablename
查看表结构:
\d tablename
列举schema:
\dn
查看索引:
\di
查询表空间:
使用gsql程序的元命令查询表空间。
postgres=# \db
检查pg_tablespace系统表。如下命令可查到系统和用户定义的全部表空间。
postgres=# SELECT spcname FROM pg_tablespace;
查看数据库用户列表:
postgres=# SELECT * FROM pg_user;
要查看用户属性:
postgres=# SELECT * FROM pg_authid;
查看所有角色:
postgres=# SELECT * FROM PG_ROLES;
退出数据库:
postgres=# \q