第六部分:SQL 和对象关系映射

原文:Part VI: SQL and Object Relational Mapping

译者:飞龙

协议:CC BY-NC-SA 4.0

自豪地采用谷歌翻译

在本书的这一部分中,我们将介绍一些内容,它们与本书其余部分的结构不相符,但对于初级开发人员来说,这是非常必要的主题。了解如何在 SQL 数据库中构造数据,会教给你如何在逻辑上思考数据存储需求。有一个建立已久的方法来解构数据,有效存储数据和访问数据。近年来 NoSQL 数据库的发展使其不同,但关系数据库设计背后的基本概念仍然有用。在你需要存储数据的每个地方,都需要良好地构造并理解数据。

大多数这些练习会让你涉及使用 SQL 数据库,因此,我建议你从 SQLite3 下载页面下载sqlite3二进制文件,如果你还没有安装的话。我们使用 Python,所以它已经安装在大多数 Python 发行版中,但有时它不可用。如果你不能在你的 python shell 中运行这个 Python 代码:

  1. >>> import sqlite3

你的 Python 就没有默认带有sqlite3。你需要弄清楚为什么会丢失,并且很可能有另外一个包,你需要先安装它才能在 Python 中使用。

理解 SQL 就是理解表

当你开始这部分的练习之前,你需要完整理解一个概念,它为许多 SQL 初学者造成了问题。

SQL 数据库中的每个单独的东西都是一张表。

把它刻录到你的大脑里。对于“表”,我是说就像一个电子表格,其中左边有行,顶部有列。通常,你将使用进入该列的某种数据来命名列。那么每一行代表你需要放入表的一件事情。这可以是一个帐户,一个人的名单及其信息,菜谱,甚至汽车。每一行都是一辆汽车,每列是一些属性,关于你需要跟踪的那辆车。

这为大多数程序员造成了问题,因为我们按照树形结构思考问题。一个对象其中有另一个对象,对象里面有个列表,列表里面有个字典,字典里面有个字符串,字符串映射为数据。我们将东西嵌套在里面,而且这种风格的数据结构不适合表。对于大多数程序员来说,似乎这两个结构(表和树)不能共存,但是树和表实际上是非常相似的。你几乎可以使用任何树形结构,并将其映射到几乎任何矩阵上,但你必须了解 SQL 数据库的另一个方面:关系。

关系使得 SQL 数据库变得比电子表格更有用。电子表格可以让你创建一整套工作表,并在其中放置不同类型的数据,但是难以将这些工作表链接在一起。SQL 数据库的目的完全是,使你可以使用列或其他表将表链接在一起。SQL 数据库的天赋是,使用一个结构(表)来构建几乎任何类型的数据结构,你可以通过将它们链接在一起来实现。

我们将了解SQL数据库中的关系,但快速回答是,如果你可以创建一个数据树,那么你可以将该树放入1个或多个表中。在本书的这个阶段,我们可以简化将一组相关的Python类转换为SQL表的过程,如下所示:

  • 为所有类创建表。
  • 在子表中设置id列指向父表。
  • 在任何两个类“之间”创建链接表,这两个类通过列表链接。

它比这更复杂,但是,当将一组类转换为 SQL 时,这是所做事情的要点。事实上,大部分像 Django 这样的系统,是上述三件事情的复杂版本。

你会学到什么

本节的目的不是教你如何成为一个 SQL 系统管理员。如果你想做这个工作,那么我建议你学习有关 Unix 的一切,然后去获得一个公司的证书,这个公司提供技术认证。请记住,这不是一个非常有趣的工作,类似于看管一个大型的猫类动物园。猫,不是小猫。

在第六部分末尾,你将学到 SQL 在基本层面上的工作原理。这是一个 SQL 速成课,以你创建的对象关系映射器(ORM)结束,它与 Django 相似。本节仅仅是了解 SQL 工作方式的一个突破点,目的是为你提供足够的信息,来了解 Django 系统中发生的东西。

如果你想在你的工作中超出这个部分,我推荐 Joe Celko 的《SQL For Smarties》,和一些时间。Joe 的书很厚,但很完整,他是 SQL 的大师。阅读这本书将使你非常能干。