首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

数据库学习的日常-ER图和SQL语句

分享是一种积极的学习态度!

抱歉,最近工作有写忙,没那么多时间和小伙伴们一起聊聊数据库。在这里先跟大家陪个不是。 在今后的我也争取在我的文章里,加入一些行业流行的咨询。

这一周我们继续跟进数据库的学习进度。上一周,我们重点学习了关系数据库的一些基本Key和Integrity的概念:

Candidate key

Super key

Primary key

Foreign Key

Entity integrity

Referential integrity

Domain integrity

如果这些名词对你来说还很陌生,请用这个法师开的传送门:【你好week2】数据库学习的日常 - 关系模型

Entity Relationship Diagram &SQL Statement

ER Diagram

首先ER Diagram是IT项目里,出现频率很高的设计,很多大公司的项目设计HLD (High level design) 或者架构设计文档,都需要有ERD的出现。我们通过ERD来更有效准确的创建、管理和维护我们的数据库。

ERD里的一些关键元素。在做assignment1的时候,基本上下面所有的元素都需要完整的体现在你的图里。

Entity 实体

Attributes 属性

Relationship 关系

Association 关联

附赠所有关联的表达方式:

Participation

Total Participation 全部参与

如下图,每一个Order都必须要被顾客下单,所以Places之后,是全部参与

Partial Participation 部分参与

很多网站都存在这样的现象,不是每一个注册的用户都会下单,所以Places之前会是Partial Participation。

附赠所有ER图所有所有元素的解释和例子:

SQL Statement

前面和上周的内容基本上都是数据库 基本上的概念。下面的内容,才是做好码农必须要会用的 -- SQL Statement (结构化查询语言)。在这里我要提一句,SQL也是有自己单词发音的 /ˈsiːkwəl/。

SQL 最重要的一个点就是分号‘;’, 用来告诉数据库,这一条指令到这里结束。

Create table

Create table 最基本的语法是 CREATE TABLE table_name ( ); 括号里加入一些属性的定义。

Syntax:

上面仅仅是创建一个普通的表

Define Primary Key (定义主键)

还是以上面为例,要创建一个带有主键的表,需要加上PRIMARY KEY的属性。这个其实可以这么写

又或者是这么写:

两者是有区别的,区别是什么,我先卖个关子。想要清楚的解释,篇幅足够开一篇新文章了。目前,同学们可以简单理解为,他们之间基本上做着相同的事情。 后者把主键的约束起了一个自定义的名字PK_Customer.

Define foreign key (定义外键)

E.g.

Insert

Syntax:

E.g.

Sequence

在Oracle数据库里,我们试用CREATE SEQUENCE 来让主键自增 (AUTO_INCREMENT), 在插入一条新纪录是,我们是不需要·写入这个column,系统会自动生成。

Syntax:

E.g.

Updates

Syntax:

E.g.

Delete

Syntax:

E.g.

Referential integrity 参照完整性

加入我们要建立一个关于公司员工档案的简易数据库。我们用一个表(department)来储存部门名称,部门id;用另外一个表(employee)来存放员工的信息,这些信息就包括员工所在的部门。参照完整性,概括的说,就是employee表里用fk depart_id来参照和department之间的联系,且fk不允许参照不存在的实体。为了确保参照完整性,各个公司的SQL数据库都试用如下三个方法来避免用户错误的删除了主键,从而导致和另一个表的关系断裂,一般在了解了business logic之后,我们就可以来选择其中的一种方法。

Assignment考点:

RESTRICT

数据库是不允许被引用的department信息被删除。通常数据库会返回error,同时rollback之间删除的statement。

CASCADE

当被引用的department信息被删除,任何在employee里相同部门(拥有该depart_id)的员工信息也会一并被删除。

NULLIFY

当被引用的department信息被删除,任何在employee里相同部门(拥有该depart_id)的员工,depart_id会被设置成空(null)

e.g.

到这里,你assignment1里的Task1基本上就可以初步成形了,剩下的就需要在完成T2 T3的时候进行各种修改和优化了。

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券