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

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

※ Schema Design 小測驗

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

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

輔助設計Schema的工具:

https://drawsql.app

優點

網頁版,方便使用。

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


註冊完畢

raw-image


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

raw-image

出現空白設計圖

raw-image



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

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

● 業務邏輯

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


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


● SKU(Stock Keeping Unit):

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

raw-image


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

  • 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 (備註)。


    全端網頁開發專業知識分享
    留言0
    查看全部
    avatar-img
    發表第一個留言支持創作者!
    ※ Schema 設計 ● 什麼是Schema? Schema 是用來描述資料庫內的表格結構、欄位格式以及表格之間的關聯。它定義了資料庫的邏輯結構,確保資料的組織和存取方式一致。 思考點:資料以什麼「形式」保存在資料庫? 資料在資料庫中以多種形式保存,主要包括以下幾種: 表格 (Table
    ※ 安裝 MySQL server 官網下載(Windows 版本) MySQL Installer  的官方下載頁:https://dev.mysql.com/downloads/installer/ MySQL Installer 是一個方便的工具,可以幫助你一次性安裝多個 MySQL 產
    ※ 資料庫的運作方式 *SQL和SQL Database的區別: SQL是一種Query Language(查詢語言) ,是一種用來幫助我們跟資料庫溝通的一種語言,用於管理和操作關係型資料庫。它不是一種資料庫類型,而是一種用來與資料庫溝通的語言。 SQL Database是指使用SQL語言來管
    ※ SQL基本介紹 SQL(結構化查詢語言)是一種查詢語言(Query Language),用於對資料庫中的資料進行操作。透過SQL,我們可以執行以下操作: 查詢資料 更新資料 刪除資料 ※ SQL四個基本概念 Table(表格):資料庫中的資料是以表格的形式儲存的。每個表格包含多個欄
    ※ 資料庫基本概念與操作 目標: 瞭解資料庫的概念和為什麼需要資料庫 瞭解SQL的概念與進行增刪改查操作 能夠自行安裝及搭建MySQL資料庫 能夠使用MySQL Workbench連線到MySQL資料庫並進行基本操作 ※ 工程中的應用 目標: 能夠根據業務邏輯需求設計Schema
    ※ 整個SQL課程過程 *如何從資料庫拿資料開始: • SELECT :從資料庫拿資料。 • ORDER BY :排序SELECT的結果。 • JOIN :連結各個TABLE的 資訊,發揮關聯式資料庫的優勢。 • GROUP BY :對資料庫的資料做加總的AGGREGATE FUNCTIO
    ※ Schema 設計 ● 什麼是Schema? Schema 是用來描述資料庫內的表格結構、欄位格式以及表格之間的關聯。它定義了資料庫的邏輯結構,確保資料的組織和存取方式一致。 思考點:資料以什麼「形式」保存在資料庫? 資料在資料庫中以多種形式保存,主要包括以下幾種: 表格 (Table
    ※ 安裝 MySQL server 官網下載(Windows 版本) MySQL Installer  的官方下載頁:https://dev.mysql.com/downloads/installer/ MySQL Installer 是一個方便的工具,可以幫助你一次性安裝多個 MySQL 產
    ※ 資料庫的運作方式 *SQL和SQL Database的區別: SQL是一種Query Language(查詢語言) ,是一種用來幫助我們跟資料庫溝通的一種語言,用於管理和操作關係型資料庫。它不是一種資料庫類型,而是一種用來與資料庫溝通的語言。 SQL Database是指使用SQL語言來管
    ※ SQL基本介紹 SQL(結構化查詢語言)是一種查詢語言(Query Language),用於對資料庫中的資料進行操作。透過SQL,我們可以執行以下操作: 查詢資料 更新資料 刪除資料 ※ SQL四個基本概念 Table(表格):資料庫中的資料是以表格的形式儲存的。每個表格包含多個欄
    ※ 資料庫基本概念與操作 目標: 瞭解資料庫的概念和為什麼需要資料庫 瞭解SQL的概念與進行增刪改查操作 能夠自行安裝及搭建MySQL資料庫 能夠使用MySQL Workbench連線到MySQL資料庫並進行基本操作 ※ 工程中的應用 目標: 能夠根據業務邏輯需求設計Schema
    ※ 整個SQL課程過程 *如何從資料庫拿資料開始: • SELECT :從資料庫拿資料。 • ORDER BY :排序SELECT的結果。 • JOIN :連結各個TABLE的 資訊,發揮關聯式資料庫的優勢。 • GROUP BY :對資料庫的資料做加總的AGGREGATE FUNCTIO
    你可能也想看
    Google News 追蹤
    Thumbnail
    *合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
    Thumbnail
    徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
    Thumbnail
    這篇文章介紹了網站的整體架構以及開發時所使用的工具和套件,包括 Next.js、Tailwind CSS 和 socket.io 等。文章回顧了程式碼的重構與優化,幫助開發者提高工作效率,適合希望深入瞭解前端開發和網站架構的讀者。
    Thumbnail
    CSS 盒模型是理解和設計網頁佈局的核心概念。它包括元素的內容、填充、邊框和外邊距。
    Thumbnail
    CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
    Thumbnail
    ※ 視圖模板 視圖模板(View Templates) 是在 MVC 架構中負責展示數據的 HTML 文件,包含模板語法,用於在渲染時插入實際數據。它們的主要目的是分離數據與展示邏輯,讓代碼更加模塊化和易於維護。 視圖模板設計和使用的核心理念,就是「重複的事情不要重複做、效益最大化、有效利用資源
    Thumbnail
    本文介紹瞭如何在後端系統開發時設計不同表單的簽核流程,包括請假表單和採購表單。以及如何動態生成簽核表單,並建立簽核節點。另外還介紹瞭如何利用繼承來簡化簽核流程的設定。
    Thumbnail
    你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
    Thumbnail
    支援Go所有的類型儲存,且可以用原生SQL敘述與跨資料庫查詢。 映射關係 table->struct record->object field->attribute 安裝 go get github.com/astaxie/beego/orm​ go get github.com
    Thumbnail
    題目敘述 題目會給我們一組定義好的界面和需求,要求我們設計一個資料結構,可以滿足平均O(1)的插入元素、刪除元素、隨機取得元素的操作。 RandomizedSet() 類別建構子 bool insert(int val) 插入元素的function界面 bool remove(int val
    Thumbnail
    ※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
    本課程學習如何添加 Room 資料庫相關依賴庫配置。
    Thumbnail
    *合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
    Thumbnail
    徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
    Thumbnail
    這篇文章介紹了網站的整體架構以及開發時所使用的工具和套件,包括 Next.js、Tailwind CSS 和 socket.io 等。文章回顧了程式碼的重構與優化,幫助開發者提高工作效率,適合希望深入瞭解前端開發和網站架構的讀者。
    Thumbnail
    CSS 盒模型是理解和設計網頁佈局的核心概念。它包括元素的內容、填充、邊框和外邊距。
    Thumbnail
    CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
    Thumbnail
    ※ 視圖模板 視圖模板(View Templates) 是在 MVC 架構中負責展示數據的 HTML 文件,包含模板語法,用於在渲染時插入實際數據。它們的主要目的是分離數據與展示邏輯,讓代碼更加模塊化和易於維護。 視圖模板設計和使用的核心理念,就是「重複的事情不要重複做、效益最大化、有效利用資源
    Thumbnail
    本文介紹瞭如何在後端系統開發時設計不同表單的簽核流程,包括請假表單和採購表單。以及如何動態生成簽核表單,並建立簽核節點。另外還介紹瞭如何利用繼承來簡化簽核流程的設定。
    Thumbnail
    你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
    Thumbnail
    支援Go所有的類型儲存,且可以用原生SQL敘述與跨資料庫查詢。 映射關係 table->struct record->object field->attribute 安裝 go get github.com/astaxie/beego/orm​ go get github.com
    Thumbnail
    題目敘述 題目會給我們一組定義好的界面和需求,要求我們設計一個資料結構,可以滿足平均O(1)的插入元素、刪除元素、隨機取得元素的操作。 RandomizedSet() 類別建構子 bool insert(int val) 插入元素的function界面 bool remove(int val
    Thumbnail
    ※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
    本課程學習如何添加 Room 資料庫相關依賴庫配置。