第六部分:SQL 和對象關系映射
原文: Part VI: SQL and Object Relational Mapping 譯者: 飛龍 協定: CC BY-NC-SA 4.0 自豪地采用 谷歌翻譯
在本書的這一部分中,我們将介紹一些内容,它們與本書其餘部分的結構不相符,但對于初級開發人員來說,這是非常必要的主題。了解如何在 SQL 資料庫中構造資料,會教給你如何在邏輯上思考資料存儲需求。有一個建立已久的方法來解構資料,有效存儲資料和通路資料。近年來 NoSQL 資料庫的發展使其不同,但關系資料庫設計背後的基本概念仍然有用。在你需要存儲資料的每個地方,都需要良好地構造并了解資料。
大多數這些練習會讓你涉及使用 SQL 資料庫,是以,我建議你從
SQLite3 下載下傳頁面下載下傳
sqlite3
二進制檔案,如果你還沒有安裝的話。我們使用 Python,是以它已經安裝在大多數 Python 發行版中,但有時它不可用。如果你不能在你的 python shell 中運作這個 Python 代碼:
>>> 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 的大師。閱讀這本書将使你非常能幹。