準備
首先閱讀這本書,必須先了解這本書里sql語句所操作的數(shù)據(jù)庫表。
也就是書附錄中的樣例表,深入理解這個樣例表不僅可以幫助我們設(shè)計好的數(shù)據(jù)庫結(jié)構(gòu),也能打下基礎(chǔ),更好的實踐本書中的代碼。
樣例表
本書使用的樣例表的是假想一個玩具經(jīng)銷商使用的一個訂單錄入系統(tǒng),這個系統(tǒng)的數(shù)據(jù)庫主要用來完成一下這些任務(wù):
- 管理供應(yīng)商
- 管理產(chǎn)品目錄
- 管理顧客列表
- 錄入顧客訂單
粗看上面這些任務(wù),我們自然會考慮到至少需要這么幾個表:
- 供應(yīng)商表,存儲供應(yīng)商的信息
- 產(chǎn)品表,存儲產(chǎn)品信息
- 顧客表,存儲顧客信息
- 訂單表,存儲訂單信息
但是,嘻嘻仔細分析,會發(fā)現(xiàn)這里的訂單信息無法用一個表存儲,一個訂單可能會包括很多的產(chǎn)品,而這些產(chǎn)品的數(shù)量是不固定的,無法用一個表來表示,所以我們考慮添加一個表來表示訂單。
這里采用的是一個訂單表,不存儲訂單的細節(jié),另外一個訂單item表存儲訂單的物品和細節(jié)。
所以,經(jīng)過以上的分析,建立了五個表。
下面我們一一介紹這五個表:
- Vendors表
這個表存儲供應(yīng)商的信息,每個供應(yīng)商對應(yīng)一條記錄,用唯一的供應(yīng)商ID來標識。并且以ID作為這個表的主鍵
具體的表結(jié)構(gòu)如下:

Paste_Image.png
- Products表
products表用來表示產(chǎn)品目錄,存儲產(chǎn)品信息,每個產(chǎn)品有一個產(chǎn)品ID但同時借助vend_id關(guān)聯(lián)到供應(yīng)商。設(shè)置主鍵和外鍵

Paste_Image.png
- customers表
customers表用來存儲顧客的信息,每個記錄表示一條顧客的信息,用ID作為其主鍵,每個顧客的ID都是唯一的。

Paste_Image.png
- Orders表
orders表存儲訂單,但不是訂單的細節(jié),這個訂單表,只有三個字段,一個是每個訂單唯一的編號也就是ID,一個訂單的日期,一個是關(guān)聯(lián)到這個訂單的顧客ID所以設(shè)置一個外鍵,關(guān)聯(lián)到相應(yīng)的顧客。

Paste_Image.png
- orderitems表
這個表存儲每個訂單中的實際物品,每個訂單的每個物品一行。所以對于orders表的每一行也就是每個訂單,由于物品數(shù)量的不一樣,所以在orderitem表中,有一行或者很多行,每個訂單物品由訂單號加訂單物品號唯一標識(也就是表示該訂單的第一個物品,第二個物品之類的),每個訂單物品包好該物品的產(chǎn)品ID。
所以這個表采用聯(lián)合主鍵,分別是訂單號(關(guān)聯(lián)到order表),和訂單物品號為主鍵
然后還要設(shè)計兩個外鍵,分別是訂單號,和產(chǎn)品ID

Paste_Image.png
總的表的結(jié)構(gòu)關(guān)系如下圖:

Paste_Image.png
sql初探
數(shù)據(jù)庫的基本概念:數(shù)據(jù)庫,表,列和數(shù)據(jù)類型,行,主鍵。
這里提一下主鍵需要滿足的條件:
- 任意兩行的主鍵值不能相同
- 每一行必須有一個主鍵,不能為null
- 主鍵的值不允許修改或者更新
- 主鍵值不能重用,某行從表格中刪除,他的值不能賦給新行
Sql是一種專門與數(shù)據(jù)庫溝通的語言。