《MySQL必知必會》學習筆記——附錄B 樣例表
附錄B 樣例表
本附錄簡要描述本書中所用的表及它們的用途。
編寫SQL語句需要對基礎數據庫的設計有良好的理解。不知道什麽信息存儲在什麽表中,表之間如何關聯以及行內數據如何分解,是不可能編寫出高效的SQL的。
建議你實際試驗本書中沒漲的每個例子。各章都使用相同的一組數據文件。為幫助你了解這些例子和掌握各章介紹的內容,本附錄描述了所用的表、表之間的關系以及如何獲得它們。
B.1 樣例表
本書中使用的樣例表為一個想象的隨身物品推銷商使用的訂單錄入系統,這些隨身物品可能是你喜歡的卡通人物需要的(是的,卡通人物,沒人規定學習MySQL必須沈悶地學)。這些表用來完成以下幾個任務:
- 管理供應商;
- 管理產品目錄;
- 管理顧客列表;
- 錄入顧客訂單。
要完成這幾個任務需要作為關系數據庫設計成分的緊密聯系的6個表。以下幾節描述各個表。
簡化的例子 這裏使用的表並不完整。現實中的訂單錄入系統必須記錄這裏沒有包含的大量其他數據(如,報酬和記賬信息、發貨跟蹤信息等)。不過,這些表演示了你在多數安裝中會遇到的各種數據的組織和關系。你可以把這些方法和技術應用到自己的數據庫中。 |
表的描述
以下介紹6個表和每個表中的列。
表的列出順序 6個表之所以要用這裏的次序列出是因為它們之間的依賴關系。因為products表依賴於vendors表,所以先列出vendors,其他表的列出也有類似的關系。 |
vendors表
vendors表存儲銷售產品的供應商。每個供應商在這個表中有一個記錄,供應商ID(vend_id)列用來匹配產品和供應商。
列 |說明
------------|--------|
vend_id |唯一的供應商ID|
vend_name |供應商名
vend_address|供應商的地址
vend_city |供應商的城市
vend_state |供應商的州
vend_zip |供應商的郵政編碼
vend_country|供應商的國家
- 所有表都應該有主鍵。這個表使用vend_id作為主鍵。vend_id為一個自動增量字段。
products表
products表包含產品目錄,每行一個產品。每個產品有唯一的ID(prod_id列),通過vend_id(供應商的唯一ID)關聯到它的供應商。
列 | 說明 |
---|---|
prod_id | 唯一的產品ID |
vend_id | 產品供應商ID(關聯到vend |
prod_name | 產品名 |
prod_price | 產品價格 |
prod_desc | 產品描述 |
- 所有表都應該有一個主鍵,這個表用prod_id作為其主鍵。
- 為實施引用完整性,應該在vend_id上定義一個外鍵,關聯到vendors的vend_id。
customers表
customers表存儲所有顧客的信息。每個顧客有唯一的ID(cust_id列)。
列 | 說明 |
---|---|
cust_id | 唯一的顧客ID |
cust_name | 顧客名 |
cust_address | 顧客的地址 |
cust_city | 顧客的城市 |
cust_state | 顧客的州 |
cust_zip | 顧客的郵政編碼 |
cust_country | 顧客的國家 |
cust_contact | 顧客的聯系名 |
cust_email | 顧客的聯系email地址 |
- 所有表都應該定義主鍵,這個表將使用cust_id作為它的主鍵。cust_id是一個自動增量字段。
orders表
orders表存儲顧客訂單(但不是訂單細節)。每個訂單唯一的編號(order_num列)。訂單用cust_id列(它關聯到customer表的顧客唯一ID)與相應的顧客關聯。
列 | 說明 |
---|---|
order_num | 唯一訂單號 |
order_date | 訂單日期 |
cust_id | 訂單顧客ID(關聯到customers表的cust_id) |
- 所有表都應該定義主鍵,這個表使用order_num作為它的主鍵。order_num是一個自動增量字段。
- 為實施引用完整性,應該在cust_id定義一個外鍵,關聯到customers的cust_id。
orderitems表
orderitems表存儲每個訂單中的實際物品,每個訂單的每個物品占一行。對orders中的每一行,orderitems中有一行或多行。每個訂單物品由訂單號加訂單物品(第一個物品、第二個物品等)唯一標識。訂單物品通過order_num列(關聯到orders中訂單的唯一ID)與它們相應的訂單關聯。此外,每個訂單項包含訂單物品的產品ID(它關聯物品到products表)。
列 | 說明 |
---|---|
order_num | 訂單號(關聯到orders表的order_num) |
order_item | 訂單物品號(在某個訂單中的順序) |
prod_id | 產品ID(關聯到products表的prod_id) |
quantity | 物品數量 |
item_price | 物品價格 |
- 所有表都應該有主鍵,這個表使用order_num和order_item作為其主鍵。
- 為實施引用完整性,應該在order_num上定義外鍵,關聯它到orders的order_num,在prod_id上定義外鍵,關聯它到products的prod_id。
productnotes表
productnotes表存儲與特定產品有關的註釋。並非所有產品都有相關的註釋,而有的產品可能有許多相關的註釋。
列 | 說明 |
---|---|
note_id | 唯一註釋ID |
prod_id | 產品ID(對應於products表中的prod_id) |
note_date | 增加註釋的日期 |
note_text | 註釋文本 |
- 所有表都應該有主鍵,這個表應該使用note_id作為其主鍵。
- 列note_text必須為FULLTEXT搜索進行索引。
- 由於這個表使用全文本搜索,因此必須指定ENGINE=MyISAM。
B.2 創建樣例表
為了學習各個例子,需要一組填充了數據的表。所需要獲得和運行的一切東西都可以在http://www.forta.com/books/0672327120/ 上找到。
此網頁包含兩個可以下載的SQL腳本文件。
- create.sql包含創建6個數據庫表(包含所有主鍵和外鍵約束)的MySQL語句。
- populate.sql包含用來填充這些表的INSERT語句。
僅對於MySQL 可下載的.sql文件中的SQL語句是DBMS專用的,它們僅用於MySQL。 這兩個腳本用MySQL 4.1和MySQL 5進行了廣泛的測試,但沒有用更早的MySQL版本進行測試。 |
(zifeiy:因為我用的是MySQL 8,MySQL 8好像沒有默認帶MyISAM引擎,所以並不確定在實際操作過程中是否會出現問題,在此註釋以下,接下來在運行這兩個sql腳本文件的時候會進行相應的補充)
在下載了腳本後,可用它們創建和填充本書各章所用的表。以下是要遵循的步驟。
- 創建一個新數據源(為安全考慮,不要使用已有的數據源)。最簡單的辦法是使用MySQL Administrator(第2章中描述)(zifeiy: 客戶端推薦DBEaver)
- 保證選擇新數據源(如果使用mysql命令行實用程序,用USE命令;如果使用MySQL Query Browser,則直接選擇相應的數據源)。
- 執行create.sql腳本。如果使用mysql命令行實用程序,可給出source create.sql;(指定create.sql文件的完全路徑)。如果使用MySQL Query Browser,選擇File,Open Script,create.sql,然後單擊Execute按鈕。
- 重復上面的步驟,用populate.sql文件填充各個新表。
創建,然後填充 必須在運行表填充腳本之前運行表創建腳本。一定要查看這些腳本返回的錯誤消息。如果創建腳本失敗,則在進行表填充之前需要解決可能存在的問題。 |
《MySQL必知必會》學習筆記——附錄B 樣例表