openGauss维护管理之学校数据模型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openGauss维护管理之学校数据模型相关的知识,希望对你有一定的参考价值。

一、关系模型

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图

openGauss维护管理之学校数据模型_数据库

二、学校数据模型表操作

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

openGauss维护管理之大小写敏感

一、概述

1、基于PostgreSQL数据敏感

openGauss源于PostgreSQL
PostgreSQL对数据大小写敏感:
1、PG中默认是大小写不敏感,表名、字段名等不区分大小写,大写字母会自动转换为小写字母,需要使用大写字母时需要使用双引号,或借助函数
2、查询数据中的大小写敏感
3、创建的账号或者角色大小写敏感
如果要指定表名或者列名为大写该怎么办?
只要加上双引号即可。
但是这种方法很麻烦,后续对于这个这些表或列进行相应的操作都需要带上双引号,不建议这样使用。
试验主要围绕这三点验证

openGauss试验结果:
1、数据库名、表名、列名创建都可以无符号创建和双引号创建
2、数据库名创建,无符号大小写库名、双引号小写库名创建后只能以全小写库名查询,双引号大写库名创建后只能原样查询
3、表名创建,无符号大小写表名、双引号小写表名创建后都可以使用无符号大小写、双引号小写查询
双引号大写表名创建后,只能使用双引号原样查询
4、列名创建,无符号大小写列名、双引号小写列名创建后都可以使用无符号大小写、双引号小写查询
双引号大写列名创建后,只能使用双引号原样查询
5、数据字符串插入和查询,只支持单引号
6、数据查询大小写敏感

二、试验

1、数据库名

1、符号试验
无符号、``、、""
create database test1 owner joe; #OK
create database `test2` owner joe; #ERROR: syntax error at or near "`"
create database test3 owner joe; #ERROR: syntax error at or near "`"
create database "test4" owner joe; #OK
drop database test1;
drop database "test4";

2、数据库名大小写敏感验证
创建数据库
create database test1 owner joe;
create database TEST2 owner joe;
create database "test3" owner joe;
create database "TEST4" owner joe;
数据库查询
select datname from pg_database;
test1
test2
test3
TEST4 #除了冒号带大写字母的,其他的都变成了小写
select datname from pg_database where datname=test1; #test1
select datname from pg_database where datname=TEST1; #null
select datname from pg_database where datname=TEST2; #null
select datname from pg_database where datname=test2; #test2
select datname from pg_database where datname=test3; #test3
select datname from pg_database where datname=TEST3; #null
select datname from pg_database where datname=test4; #null
select datname from pg_database where datname=TEST4; #TEST4
清理数据库
drop database test1;
drop database test2;
drop database test3;
drop database "TEST4";
总结
无符号大写库名、无符号小写库名、双引号小写库名,创建后都会转换成无符号小写数据库名
双引号大写库名,创建后是无符号大写数据库名

2、表名

1、符号试验
无符号、``、、""
create table test1(id int); #OK
create table `test2`(id int); #ERROR: syntax error at or near "`"
create table test3(id int); #ERROR: syntax error at or near "test3"
create table "test4"(id int); #OK
drop table test1;
drop table "test4";

2、表名大小写敏感验证
create table test1(id int);
create table TEST2(id int);
create table "test3"(id int);
create table "TEST4"(id int);
表查询
select * from test1; #OK
select * from TEST1; #OK
select * from "test1"; #OK
select * from "TEST1"; #ERROR: relation "TEST1" does not exist on dn_6001

select * from test2; #OK
select * from TEST2; #OK
select * from "test2"; #OK
select * from "TEST2"; #ERROR: relation "TEST2" does not exist on dn_6001

select * from test3; #OK
select * from TEST3; #OK
select * from "test3"; #OK
select * from "TEST3"; #ERROR: relation "TEST3" does not exist on dn_6001

select * from test4; #ERROR: relation "test4" does not exist on dn_6001
select * from TEST4; #ERROR: relation "test4" does not exist on dn_6001
select * from "test4"; #ERROR: relation "test4" does not exist on dn_6001
select * from "TEST4"; #OK
表清理
drop table test1;
drop table TEST2;
drop table "test3";
drop table "TEST4";
总结:无符号的表名,无符号大写、无符号小写、双引号小写,都可以查询,双引号大写无法查询
有双引号小写的表名,无符号大写、无符号小写、双引号小写,都可以查询,双引号大写无法查询
有双引号大写的表名,无符号大写、无符号小写、双引号小写,无法查询,双引号原样可以查询

3、列名

1、符号试验
无符号、``、、""
create table test1(id int); #OK
create table test2(`id` int); #ERROR: syntax error at or near "`"
create table test3(id int); #ERROR: syntax error at or near "id"
create table test4("id" int); #OK
drop table if exists test1;
drop table if exists test4;
总结:列名支持无符号和双引号("")

2、列名大小写敏感验证
创建表并插入数据
create table test1(id1 int,ID2 int,"id3" int,"ID4" int);
insert into test1 values(1,2,3,4),(5,6,7,8);
数据查询
第一步
select id1 from test1 where id1=1; #1
select id1 from test1 where ID1=1; #1
select id1 from test1 where "id1"=1; #1
select id1 from test1 where "ID1"=1; #ERROR: column "ID1" does not exist
第二步
select id1 from test1 where id2=2; #1
select id1 from test1 where ID2=2; #1
select id1 from test1 where "id2"=2; #1
select id1 from test1 where "ID2"=2; #ERROR: column "ID2" does not exist
第三步
select id1 from test1 where id3=3; #1
select id1 from test1 where ID3=3; #1
select id1 from test1 where "id3"=3; #1
select id1 from test1 where "ID3"=3; #ERROR: column "ID3" does not exist
第四步
select id1 from test1 where id4=4; #ERROR: column "id4" does not exist
select id1 from test1 where ID4=4; #ERROR: column "id4" does not exist
select id1 from test1 where "id4"=4; #ERROR: column "id4" does not exist
select id1 from test1 where "ID4"=4; #1
数据清理
drop table if exists test1;
总结:无符号的列名,无符号大写、无符号小写、双引号小写,都可以查询,双引号大写无法查询
有双引号小写的列名,无符号大写、无符号小写、双引号小写,都可以查询,双引号大写无法查询
有双引号大写的列名,无符号大写、无符号小写、双引号小写,无法查询,双引号大写可以查询

4、数据大小写敏感

1、符号试验
无符号、``、、""
create table test1(id int,name VARCHAR(10));
insert into test1 values(1,hello); #ERROR: column "hello" does not exist
insert into test1 values(2,`hello`); #ERROR: column "hello" does not exist
insert into test1 values(3,hello); #OK
insert into test1 values(4,"hello"); #ERROR: column "hello" does not exist
总结:具体数据字符串类型只支持单引号()

2、数据大小写敏感验证
数据插入
delete from test1
insert into test1 values(1,hello);
insert into test1 values(2,HEllo);
insert into test1 values(3,HELLO);
数据查询
select id from test1 where name=hello; #1
select id from test1 where name=HEllo; #2
select id from test1 where name=HELLO; #3
select id from test1 where name like HE%; #2、3
清理数据
drop table if exists test1;
总结:数据大小写敏感

以上是关于openGauss维护管理之学校数据模型的主要内容,如果未能解决你的问题,请参考以下文章

openGauss维护管理之最大连接数设置

openGauss维护管理之大小写敏感

openGauss维护管理之客户端连接工具gsql

openGauss维护管理之EXPLAIN执行计划

openGauss维护管理之客户端连接超时

openGauss维护管理之日志收集gs_collector