※ Schema Design 小測驗
● 測驗一:電商平台是後端開發最基本的例子
幫電商平台設計一個SQL Database Schema,需要保存商品資料、顧客資料、訂單資料…
輔助設計Schema的工具:
https://drawsql.app
優點:
網頁版,方便使用。
功能方面有足夠的簡化,適合初學者。
註冊完畢:
按New Diagram後,填上Diagram name,資料庫選擇MySQL,再按Create diagram:
出現空白設計圖:
● 設計前所需要的基本知識:
- SQL的基本觀念:一個資料庫(Database)通常由多個資料表(Tables)組成,每個資料表包含多行(Rows)和多列(Columns)。
- Schema Design:Schema是資料庫的結構或藍圖,定義了資料表、欄位、關聯等。設計Schema時,遵循正規化(Normalization)原則可以幫助減少資料冗餘和提高資料完整性。
- Normal Forms:
- 第一正規形式(1NF):確保每個欄位都是原子的,不可再分。
- 第二正規形式(2NF):在滿足1NF的基礎上,確保每個非主鍵欄位完全依賴於主鍵。
- 第三正規形式(3NF):在滿足2NF的基礎上,確保每個非主鍵欄位不依賴於其他非主鍵欄位。
● 業務邏輯:
- 電商平台會有很多的商品資料,所以需要一個table來保存商品資料。
- 需要一個訂單table,用來釐清訂單與顧客和商品的關係。
- Order和Customer的關係:當一個顧客(Customer)可以有多個訂單(Order)時,這是一對多的關係。將顧客的ID(customer_id)存儲在訂單表(Order)中,可以清楚地表示每個訂單屬於哪個顧客。這樣的設計符合正規化原則,特別是第一正規形式(1NF),確保每個欄位只保存一個值。
- Order和Product的關係:兩者是多對多關係,因為一個Order可以下很多個Product,但一個Product也可以同時包含很多個Order裡面。當多對多關係發生時,我們通常會使用一個中間表(junction table)來保存兩個表之間的關係。假設我們創建一個名為
OrderProduct
的中間表,這個表會包含 order_id
和 product_id
兩個欄位,分別對應 Order
表和 Product
表的主鍵。這樣的設計可以有效地表示一個訂單包含多個產品,同時一個產品也可以出現在多個訂單中。
- Order和Product的另一層關係:在訂單和產品的多對多關係中,我們使用一個中間表來保存它們之間的關係。這個中間表不僅保存訂單和產品的關聯,還可以記錄每個訂單中每個產品的數量。這樣的設計可以清楚地管理訂單中每個產品的數量,同時保持產品的其他詳細資訊在
Product
表中。
● SKU(Stock Keeping Unit):
指的是一個產品在倉庫中的唯一標識單位。每個 SKU 代表一個特定的產品變體,包括規格、顏色、尺寸等。透過 SKU,你可以精確地追蹤和管理庫存,並了解消費者購買的是哪個具體的產品選項。
● 電商系統功能優化思考方向:
- Product 表:保存產品的詳細資訊,包括 SKU。
- Order 表:保存訂單的詳細資訊,包括寄送、付款、客戶和其他相關資訊。
- OrderProduct 表:保存訂單和產品之間的關係,包括每個訂單中每個產品的數量。
● Order 表的優化:
- 寄送資訊:
- shipping_address (寄送地址)。
- shipping_method (寄送方式)。
- shipping_status (寄送狀態)。
- tracking_number (追蹤號碼)。
- 付款資訊:
- payment_method (付款方式)。
- payment_status (付款狀態)。
- total_amount (總金額)。
- 客戶資訊:
- customer_id (客戶ID,參照客戶表)。
- order_date (訂單日期)。
- order_status (訂單狀態,如處理中、已完成、已取消等)。
- 其他資訊:
- discount (折扣)。
- tax (稅金)。
- notes (備註)。