更新於 2024/09/13閱讀時間約 4 分鐘

JS:資料庫設計與應用(六)

    ※ Schema Design 小測驗

    ● 測驗一:電商平台是後端開發最基本的例子

    幫電商平台設計一個SQL Database Schema,需要保存商品資料、顧客資料、訂單資料…

    輔助設計Schema的工具:

    https://drawsql.app

    優點

    網頁版,方便使用。

    功能方面有足夠的簡化,適合初學者。


    註冊完畢


    按New Diagram後,填上Diagram name,資料庫選擇MySQL,再按Create diagram

    出現空白設計圖



    ● 設計前所需要的基本知識

    1. SQL的基本觀念一個資料庫(Database)通常由多個資料表(Tables)組成,每個資料表包含多行(Rows)和多列(Columns)。
    2. Schema DesignSchema是資料庫的結構或藍圖,定義了資料表、欄位、關聯等。設計Schema時,遵循正規化(Normalization)原則可以幫助減少資料冗餘和提高資料完整性。
    3. Normal Forms
    • 第一正規形式(1NF):確保每個欄位都是原子的,不可再分。
    • 第二正規形式(2NF):在滿足1NF的基礎上,確保每個非主鍵欄位完全依賴於主鍵。
    • 第三正規形式(3NF):在滿足2NF的基礎上,確保每個非主鍵欄位不依賴於其他非主鍵欄位。

    ● 業務邏輯

    • 電商平台會有很多的商品資料,所以需要一個table來保存商品資料。
    • 需要一個table來保存顧客資料。
    • 需要一個訂單table,用來釐清訂單與顧客和商品的關係。
    1. Order和Customer的關係:當一個顧客(Customer)可以有多個訂單(Order)時,這是一對多的關係。將顧客的ID(customer_id)存儲在訂單表(Order)中,可以清楚地表示每個訂單屬於哪個顧客。這樣的設計符合正規化原則,特別是第一正規形式(1NF),確保每個欄位只保存一個值。


    1. Order和Product的關係:兩者是多對多關係,因為一個Order可以下很多個Product,但一個Product也可以同時包含很多個Order裡面。當多對多關係發生時,我們通常會使用一個中間表(junction table)來保存兩個表之間的關係。假設我們創建一個名為 OrderProduct 的中間表,這個表會包含 order_id 和 product_id 兩個欄位,分別對應 Order 表和 Product 表的主鍵。這樣的設計可以有效地表示一個訂單包含多個產品,同時一個產品也可以出現在多個訂單中。
    1. Order和Product的另一層關係:在訂單和產品的多對多關係中,我們使用一個中間表來保存它們之間的關係。這個中間表不僅保存訂單和產品的關聯,還可以記錄每個訂單中每個產品的數量。這樣的設計可以清楚地管理訂單中每個產品的數量,同時保持產品的其他詳細資訊在 Product 表中。


    ● SKU(Stock Keeping Unit):

    指的是一個產品在倉庫中的唯一標識單位。每個 SKU 代表一個特定的產品變體,包括規格、顏色、尺寸等。透過 SKU,你可以精確地追蹤和管理庫存,並了解消費者購買的是哪個具體的產品選項。


    ● 電商系統功能優化思考方向:

    • Product 表:保存產品的詳細資訊,包括 SKU。
    • Order 表:保存訂單的詳細資訊,包括寄送、付款、客戶和其他相關資訊。
    • OrderProduct 表:保存訂單和產品之間的關係,包括每個訂單中每個產品的數量。

    ● Order 表的優化:

    1. 寄送資訊:
      • shipping_address (寄送地址)。
      • shipping_method (寄送方式)。
      • shipping_status (寄送狀態)。
      • tracking_number (追蹤號碼)。
    2. 付款資訊:
      • payment_method (付款方式)。
      • payment_status (付款狀態)。
      • total_amount (總金額)。
    3. 客戶資訊:
      • customer_id (客戶ID,參照客戶表)。
      • order_date (訂單日期)。
      • order_status (訂單狀態,如處理中、已完成、已取消等)。
    4. 其他資訊:
      • discount (折扣)。
      • tax (稅金)。
      • notes (備註)。


    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.