資料庫模型設計

External Level 👉

Conceptual Level/ Logical Level 👉

Internal Level 👉

graph TD
    %% 外部層(External Level)
    A[View 1] <--> B[Conceptual Data Model]
    C[View 2] <--> B
    D[View 3] <--> B

    %% 概念層(Conceptual Level / Logical Level)
    B --> E[Logical Data Model]

    %% 內部層(Internal Level)
    E --> F[Physical Data Model]

🔖請參考課本 p.3-2

[課程活動]請分析概念資料模型與邏輯資料模型之異同

🔖請閱讀課本 pp. 3-3 至 3-5


📌 Logical Data Model 邏輯資料模型

erDiagram
    CUSTOMERS ||--o{ ORDERS : "1:N"
    ORDERS }o--|| PRODUCTS : "N:M"

    CUSTOMERS {
        INT CustomerID
        VARCHAR Name
        VARCHAR Email
        VARCHAR Phone
        TEXT Address
    }

    ORDERS {
        INT OrderID
        INT CustomerID
        DATE OrderDate
        DECIMAL TotalAmount
        VARCHAR PaymentStatus
        INT ProductID
        INT Quantity
    }

    PRODUCTS {
        INT ProductID
        VARCHAR Name
        VARCHAR Category
        DECIMAL Price
        INT StockQuantity
    }
 
實體(Entity) 屬性(Attributes) 關係(Relationships)
Customers(顧客) CustomerID, Name, Email, Phone, Address 一位顧客可以下多筆訂單(1:N)
Orders(訂單) OrderID, CustomerID, OrderDate, TotalAmount, PaymentStatus, ProductID, Quantity 一筆訂單屬於一位顧客(N:1),且直接關聯產品
Products(產品) ProductID, Name, Category, Price, StockQuantity 一筆訂單可包含多個產品(N:M)

關係(Relationships)

📌 Physical Data Model 實體資料模型

表格名稱 欄位名稱 資料型態 約束條件(Constraints)
Customers(顧客) CustomerID INT PRIMARY KEY AUTO_INCREMENT
Name VARCHAR(100) NOT NULL
Email VARCHAR(255) UNIQUE NOT NULL
Phone VARCHAR(15)
Address TEXT
Orders(訂單) OrderID INT PRIMARY KEY AUTO_INCREMENT
CustomerID INT FOREIGN KEY REFERENCES Customers(CustomerID) ON DELETE CASCADE
OrderDate DATE NOT NULL DEFAULT CURRENT_DATE
TotalAmount DECIMAL(10,2) NOT NULL CHECK (TotalAmount >= 0)
PaymentStatus VARCHAR(50) CHECK (PaymentStatus IN ('Pending', 'Completed', 'Cancelled'))
ProductID INT FOREIGN KEY REFERENCES Products(ProductID) ON DELETE CASCADE
Quantity INT NOT NULL CHECK (Quantity > 0)
Products(產品) ProductID INT PRIMARY KEY AUTO_INCREMENT
Name VARCHAR(100) NOT NULL
Category VARCHAR(50)
Price DECIMAL(10,2) NOT NULL CHECK (Price > 0)
StockQuantity INT NOT NULL CHECK (StockQuantity >= 0)

📌備註說明

AUTO_INCREMENTCustomerID, OrderID, ProductID 自動增加,確保唯一性

UNIQUE (Email) → 確保 Email 不重複,避免資料衝突

CHECK 限制條件 → 避免錯誤資料輸入