使用 SQL 构建一个关系数据库比你想的更容易

导读:使用 SQL 构建数据库比大多数人想象得要简单。实际上,你甚至不需要成为一个有经验的程序员就可以使用 SQL 创建数据库。在本文中,我将解释如何使用 MySQL 5.6 来创建简单的关系型数据库管理系统(RDMS)。

在开始之前,我想顺便感谢一下SQL Fiddle,这是我用来运行脚本的工具。它提供了一个用于测试简单脚本的有用的沙箱。

在本教程中,我将构建一个使用如下实体关系图(ERD)中显示的简单架构的数据库。数据库列出了学生和正在学习的课程。为了保持简单,我使用了两个实体(即表),只有一种关系和依赖。这两个实体称为和。

数据库的多样性是一对多的,因为每门课程可以包含很多学生,但每个学生只能学习一门课程。

关于术语的快速说明:

一张表称为一个实体。

一个字段称为一个属性。

一条记录称为一个元组。

用于构建数据库的脚本称为架构。

01 构建架构

要构建数据库,使用命令,然后定义每个字段的名称和数据类型。数据库使用(字符串)和(整数),其中表示可以存储的值的长度。例如可以是。

这是用于创建两个表的代码:

CREATETABLEdbo_students

(

student_idINT(2)AUTO_INCREMENTNOTNULL,

student_nameVARCHAR(50),

course_studiedINT(2),

PRIMARYKEY(student_id)

);

CREATETABLEdbo_courses

(

course_idINT(2)AUTO_INCREMENTNOTNULL,

course_nameVARCHAR(30),

PRIMARYKEY(course_id)

);

意味着字段不能为空,意味着当一个新的元组被添加时,ID 号将自动生成,是对先前存储的 ID 号加 1,以强化各实体之间的完整参照性。是每个表的惟一标识符属性。这意味着每个元组都有自己的不同的标识。

02 关系作为一种约束

就目前来看,这两张表格是独立存在的,没有任何联系或关系。要连接它们,必须标识一个外键。在中,外键是,其来源在中,意味着该字段被引用。SQL 中的特定命令为,并且将使用另一个名为的命令添加这种关系,这样即使在架构构建完毕后,也可以编辑表。

以下代码将关系添加到数据库构造脚本中:

ALTERTABLEdbo_students

ADDCONSTRAINTFK_course_studied

FOREIGNKEY(course_studied)REFERENCESdbo_courses(course_id);

使用命令实际上并不是必要的,但这是一个好习惯,因为它意味着约束可以被命名并且使维护更容易。现在数据库已经完成了,是时候添加一些数据了。

03 将数据添加到数据库

是用于直接选择要添加哪些属性(即字段)数据的命令。首先声明实体名称,然后声明属性,下边是添加到实体的数据,从而创建一个元组。如果指定了,这表示该属性不能留空。以下代码将展示如何向表中添加记录:

INSERTINTOdbo_courses(course_id,course_name)

VALUES(001,'Software Engineering');

INSERTINTOdbo_courses(course_id,course_name)

VALUES(002,'Computer Science');

INSERTINTOdbo_courses(course_id,course_name)

VALUES(003,'Computing');

INSERTINTOdbo_students(student_id,student_name,course_studied)

VALUES(001,'student1',001);

INSERTINTOdbo_students(student_id,student_name,course_studied)

VALUES(002,'student2',002);

INSERTINTOdbo_students(student_id,student_name,course_studied)

VALUES(003,'student3',002);

INSERTINTOdbo_students(student_id,student_name,course_studied)

VALUES(004,'student4',003);

现在数据库架构已经完成并添加了数据,现在是时候在数据库上运行查询了。

04 查询

查询遵循使用以下命令的集合结构:

SELECT

FROM

WHERE

要显示实体内的所有记录并显示课程代码和课程名称,请使用。这是一个通配符,它消除了键入所有属性名称的需要。(在生产数据库中不建议使用它。)此处查询的代码是:

SELECT*

FROMdbo_courses

此处查询的输出显示表中的所有元组,因此可显示所有可用课程:

|course_id|course_name|

|-----------|----------------------|

|1|Software Engineering|

|2|Computer Science|

|3|Computing|

在后面的文章中,我将使用三种类型的连接之一来解释更复杂的查询:内连接、外连接和交叉连接。

这是完整的脚本:

CREATETABLEdbo_students

(

student_idINT(2)AUTO_INCREMENTNOTNULL,

student_nameVARCHAR(50),

course_studiedINT(2),

PRIMARYKEY(student_id)

);

CREATETABLEdbo_courses

(

course_idINT(2)AUTO_INCREMENTNOTNULL,

course_nameVARCHAR(30),

PRIMARYKEY(course_id)

);

ALTERTABLEdbo_students

ADDCONSTRAINTFK_course_studied

FOREIGNKEY(course_studied)REFERENCESdbo_courses(course_id);

INSERTINTOdbo_courses(course_id,course_name)

VALUES(001,'Software Engineering');

INSERTINTOdbo_courses(course_id,course_name)

VALUES(002,'Computer Science');

INSERTINTOdbo_courses(course_id,course_name)

VALUES(003,'Computing');

INSERTINTOdbo_students(student_id,student_name,course_studied)

VALUES(001,'student1',001);

INSERTINTOdbo_students(student_id,student_name,course_studied)

VALUES(002,'student2',002);

INSERTINTOdbo_students(student_id,student_name,course_studied)

VALUES(003,'student3',002);

INSERTINTOdbo_students(student_id,student_name,course_studied)

VALUES(004,'student4',003);

SELECT*

FROMdbo_courses

05 学习更多

SQL 并不困难;我认为它比编程简单,并且该语言对于不同的数据库系统是通用的。 请注意,实体关系图中(LCTT 译注:文章中使用的是)不是必需的实体命名约定;我之所以使用,仅仅是因为它是 Microsoft SQL Server 中的标准。

如果你想了解更多,在网络上这方面的最佳指南是W3Schools.com中对所有数据库平台的 SQL 综合指南。请随意使用我的数据库。

作者:Aaron Cocker

译者:MjSeven

来源:Linux中国(ID:linux-cn)

原文:https://opensource.com/article/18/2/getting-started-sql

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180424B1PNWU00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券