写点什么

原创 | 使用 JPA 实现 DDD 持久化 -R: 数据的世界

发布于: 2020 年 08 月 12 日
原创 | 使用JPA实现DDD持久化-R:数据的世界







尽管近些年出现了对象数据库、文档数据库等竞争者,关系数据库(Relational database)仍然是主流的数据库系统。

关系数据库是创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系模型是由Edgar Frank Codd于1970年首先提出的,并配合“Codd十二定律”。现如今虽然对此模型有一些批评意见,但它还是数据存储的传统标准。标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。

关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。

  • 数据结构是指对实体类型和实体间联系的表达和实现;

  • 数据操作是指对数据库的检索和更新(包括插入、删除和修改)两类操作;

  • 数据完整性约束给出数据及其联系应具有的制约和依赖规则。

关系数据库以表的形式存储数据,以外键关联的方式记录表之间的联系,以SQL语句操作和检索数据。

1. 表(Table,又称为关系Relation)

关系数据库使用的形式存储数据。数据以行-列二维表格的形式保存到表中。每张表通常对应于现实世界中的一种实体类型,如订单、产品、顾客等等。

下面是存储订单的表的数据实例:



下面是存储订单条目的表的数据实例:



每张表可以包含多条记录(Record,又称为行Row)。每条记录(行)通常对应于现实世界中的一个实体对象实例,例如订单号为GD20020412001的一个订单。

每条记录由多个字段(Field,又称为列Column)组成。每个字段通常对应于现实世界实体实例的一个属性。每个字段对应一个数据类型,如整数、浮点数、字符串、日期等等。例如上面的订单条目表中,包含id, order_id, product_id, quantityunit_price字段。

表可以定义一个主键(Primary Key),由一到多个字段组成,用来在表的范围内唯一标识每一条记录。

表之内可以定义各种约束,例如某个字段不能为空(null),某个或某组字段必须在表范围内唯一等等。

表之内可以定义若干个索引。每个索引由一到多个字段组成,用于加快查询速度。

2. 表间联系

表与表之间可以通过外键(Foreign Key)进行关联。外键是表中的一个(或多个)字段,其中的字段值引用的是另一个表的主键值。

在上面的例子中,订单条目表的order_id字段中的值(35,36等)引用的是订单表的主键(id字段)值。order_id字段就是外键。

3. SQL

结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

SQL语言1974年由BoyceChamberlin提出,并首先在IBM公司研制的关系数据库系统SystemR上实现。由于它具有功能丰富、使用方便灵活、语言简洁易学等突出的优点,深受计算机工业界和计算机用户的欢迎。1980年10月,经美国国家标准局(ANSI)的数据库委员会X3H2批准,将SQL作为关系数据库语言的美国标准,同年公布了标准SQL,此后不久,国际标准化组织(ISO)也作出了同样的决定。 

SQL从功能上可以分为3部分:数据定义、数据操纵和数据控制。

  • SQL数据定义功能:能够定义数据库的三级模式结构,即外模式、全局模式和内模式结构。在SQL中,外模式又叫做视图(View),全局模式简称模式(Schema),内模式由系统根据数据库模式自动实现,一般无需用户过问。 

  • SQL数据操纵功能:包括对基本表和视图的数据插入、删除和修改,特别是具有很强的数据查询功能。 

  • SQL的数据控制功能:主要是对用户的访问权限加以控制,以保证系统的安全性。

SQL是一种第四代语言(4GL),用户只需要提出“干什么”,无须具体指明“怎么干”,像存取路径选择和具体处理操作等均由系统自动完成。

SQL包含6个部分:

  • 数据查询语言(DQL:Data Query Language:其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECTDQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHEREORDER BYGROUP BYHAVING。这些DQL保留字常与其它类型的SQL语句一起使用。 

  • 数据操作语言(DML:Data Manipulation Language:其语句包括动词INSERTUPDATEDELETE。它们分别用于添加、修改和删除数据。

  • 事务控制语言(TCL:它的语句能确保被DML语句影响的表的所有行及时得以更新。包括COMMIT(提交)命令、SAVEPOINT(保存点)命令、ROLLBACK(回滚)命令。

  • 数据控制语言(DCL:它的语句通过GRANTREVOKE实现权限控制,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANTREVOKE控制对表单个列的访问。 

  • 数据定义语言(DDL:其语句包括动词CREATEALTERDROP。在数据库中创建新表或修改、删除表(CREAT TABLEDROP TABLE);为表加入索引等。

  • 指针控制语言(CCL:它的语句,像DECLARE CURSORFETCH INTOUPDATE WHERE CURRENT用于对一个或多个表单独行的操作。



详细内容请戳这里↓↓↓

原创 | 使用JPA实现DDD持久化-R:数据的世界



这一节就讲到这里,下一节我们讲"O/R阻抗失配"



如果觉得有收获,点个【赞】鼓励一下呗!



发布于: 2020 年 08 月 12 日阅读数: 54
用户头像

高级架构师,技术顾问,交流公号:编程道与术 2020.04.28 加入

杨宇于2020年创立编程道与术,致力于研究领域分析与建模、测试驱动开发、架构设计、自动化构建和持续集成、敏捷开发方法论、微服务、云计算等顶尖技术领域。 了解更多公众号:编程道与术

评论

发布
暂无评论
原创 | 使用JPA实现DDD持久化-R:数据的世界