[openGauss]基本表构建与完整性约束

[openGauss]基本表构建与完整性约束openGauss内核基于PostgreSQL,其操作语句与PostgreSQL相类似,使用的也是SQL语句。 然而,在openGauss1.0.0版本中,尚未支持外键,因此需要将openGauss

「这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战

前言

openGauss内核基于PostgreSQL,其操作语句与PostgreSQL相类似,使用的也是SQL语句。

然而,在openGauss1.0.0版本中,尚未支持外键,因此需要将openGauss升级至2.0.0版本。

同时在这里指出上次文章中的缺漏,在openGauss2.0.0版本中,是支持restart操作,并且文件目录也是使用db来命名的。

创建基本表

这里,使用的是数据库原理中经常使用到的学生-课程-教师模型作为演示。

首先创建一个学生表:

CREATE TABLE Student (
	id CHAR(9) PRIMARY KEY,
	name CHAR(10) NOT NULL,
	sex CHAR(2) CHECK (Sex IN ('F','M')),
	grade CHAR(4) NOT NULL,
	major CHAR(20) NOT NULL,
	class INT CHECK (class > 0),
	room CHAR(10) NOT NULL
);

在这张表中使用了一些完整性约束条件,例如NOT NULL字段不能为空,以及CHECK自定义的完整性约束。 使用学生id作为主键。

%P1SY0JK8K5DI}1WY~1}MX.png

然后是教师表:

CREATE TABLE Teacher (
	id CHAR(9) PRIMARY KEY,
	name CHAR(10) NOT NULL,
	salary INT
);

与上面学生表差别不大。

BSUXQZ)XG@QAU0`WL_5L1V.png

接着是课程表:

CREATE TABLE Course (
	id CHAR(9) PRIMARY KEY,
	teacher_id CHAR(9),
	name CHAR(20) NOT NULL UNIQUE,
	FOREIGN KEY(teacher_id) REFERENCES Teacher(id)
);

在课程表中,我们需要使用外键关联任课教师,因此需要一个teacher_id作为外键与teacher表中的id进行关联,形成教师和课程的一对多关系,使用FOREIGN KEY(teacher_id) REFERENCES Teacher(id)来实现这一操作。

这里再次强调,一定要使用openGauss2.0.0以及以上版本,否则将不支持外键操作!!!

LK8RMQB7B6GVZHOWAG.png

最后是学生和课程之间的选修关系:

CREATE TABLE student_course(
	student_id CHAR (9),
	course_id CHAR (9),
	score INT CHECK (score BETWEEN 0 AND 100) DEFAULT 0,
	PRIMARY KEY(student_id,course_id),
	FOREIGN KEY (student_id) REFERENCES Student(id),
	FOREIGN KEY (course_id) REFERENCES Course(id)
);

由于一个学生可以选修多个课程,一个课程同时也可被多个学生选修,因此我们需要通过一张中间表来实现学生和课程选修时的多对多关系。

这里,使用student_id和course_id联合作为主键,用于唯一标识选修情况,同时,用于作为主键的两个id又作为外键分别唯一对应一个课程和一个学生。

此外,除了关联关系,我们还可以在这张表上面额外添加一个分数字段,用于存储某学生选修某课程获得的分数,即score字段。

C7JMFPM64CIENNW2CPQ%3.png

最终,我们可以通过Navicat查看到我们刚刚新建的四张表:

{O7I2F1MOTFZXI@Z(6Q%C.png

今天的文章[openGauss]基本表构建与完整性约束分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/23245.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注