logo icon
ธนินัชดอทคอม - รับสร้าง Website, Mobile Application
image

บทความ

ธนินัช ดอทคอม - ผู้เชี่ยวชาญทำเว็บไซต์

ออกแบบฐานข้อมูลสินค้าแบบ Variations product

การออกแบบฐานข้อมูลสินค้าแบบ Variations product คือระบบเก็บข้อมูลของสินค้าที่มีคุณสมบัติแตกต่างกันในแต่ละตัวเลือก เช่น สี ขนาด น้ำหนัก เป็นต้น แต่ยังมีชื่อสินค้าเดียวกัน คุณจำเป็นต้องมีตารางที่สามารถจัดการคุณสมบัติของสินค้าและความสัมพันธ์ระหว่างกัน ตัวอย่างตารางมีดังนี้:

  1. ตาราง products ที่เก็บข้อมูลของสินค้าจะประกอบด้วยคอลัมน์ดังนี้:

    Column Name Data Type Description
    id (PK) INT รหัสสินค้า
    name VARCHAR(255) ชื่อสินค้า
    sku VARCHAR(100) รหัสสินค้า (Stock Keeping Unit)
    price DECIMAL(10,2) ราคาพื้นฐาน

    - คอลัมน์ id เป็น Primary Key ที่ใช้ในการระบุรหัสสินค้า
    - คอลัมน์ name เป็นชื่อของสินค้า
    - คอลัมน์ sku เป็นรหัสของสินค้าที่ใช้ในการติดตามสินค้าในระบบ Inventory Management
    - คอลัมน์ price เป็นราคาของสินค้าที่ถูกกำหนดไว้ตามค่าพื้นฐานของสินค้า

    ตัวอย่างสำหรับตาราง products ที่เก็บข้อมูลของสินค้าต่าง ๆ จะประกอบด้วยคอลัมน์ดังนี้:

    id name sku price
    1 T-Shirt Black TSB-0001 250
    2 T-Shirt White TSW-0001 250
    3 Hoodie Black HDB-0001 650
    4 Hoodie Gray HDG-0001 650

    ในตัวอย่างนี้, คอลัมน์ id เป็น Primary Key ที่ใช้ในการระบุรายการสินค้าแต่ละรายการ คอลัมน์ name เป็นคอลัมน์ที่ใช้เก็บชื่อสินค้า คอลัมน์ sku เป็นคอลัมน์ที่ใช้เก็บรหัสสินค้า (Stock Keeping Unit) ซึ่งใช้ในการระบุสินค้าอย่างชัดเจน และคอลัมน์ price เป็นคอลัมน์ที่ใช้เก็บราคาพื้นฐานของสินค้า

  1. ตาราง attributes ที่เก็บข้อมูลคุณสมบัติของสินค้าจะประกอบด้วยคอลัมน์ดังนี้:

    Column Name Data Type Description
    id (PK) INT รหัสคุณสมบัติ
    name VARCHAR(255) ชื่อคุณสมบัติ


    - คอลัมน์ id เป็น Primary Key ที่ใช้ในการระบุรหัสคุณสมบัติ
    - คอลัมน์ name เป็นชื่อของคุณสมบัติของสินค้าที่ถูกกำหนดขึ้นมาเพื่อให้ผู้ใช้งานสามารถค้นหาสินค้าที่ต้องการได้ง่ายขึ้น

ตัวอย่างสำหรับตาราง attributes ที่เก็บข้อมูลคุณสมบัติของสินค้าจะประกอบด้วยคอลัมน์ดังนี้:

id name
1 Size
2 Color
3 Material

ในตัวอย่างนี้, คอลัมน์ id เป็น Primary Key ที่ใช้ในการระบุรายการคุณสมบัติแต่ละรายการ คอลัมน์ name เป็นคอลัมน์ที่ใช้เก็บชื่อคุณสมบัติของสินค้า ซึ่งอาจมีความหลากหลายตามลักษณะของสินค้า ตัวอย่างเช่น ขนาด (Size) สี (Color) วัสดุ (Material) และอื่น ๆ ตามที่ต้องการ

  1. ตาราง attribute_values ที่เก็บข้อมูลค่าคุณสมบัติของสินค้าจะประกอบด้วยคอลัมน์ดังนี้:

    Column Name Data Type Description
    id (PK) INT รหัสค่าคุณสมบัติ
    attribute_id (FK) INT รหัสคุณสมบัติ (Foreign Key จากตาราง attributes)
    value VARCHAR(255) ค่าคุณสมบัติ

         - คอลัมน์ id เป็น Primary Key ที่ใช้ในการระบุรหัสค่าคุณสมบัติ
         - คอลัมน์ attribute_id เป็น Foreign Key ที่เชื่อมโยงกับตาราง attributes เพื่อแสดงความสัมพันธ์กับคุณสมบัติของสินค้า
         - คอลัมน์ value เป็นค่าของคุณสมบัติของสินค้าที่ถูกกำหนดขึ้นเพื่ออธิบายลักษณะและลักษณะของสินค้าให้ผู้ใช้งานเห็นได้ชัดเจน

ตัวอย่างสำหรับตาราง attribute_values ที่เก็บข้อมูลค่าคุณสมบัติของสินค้าจะประกอบด้วยคอลัมน์ดังนี้:

id attribute_id value
1 1 S
2 1 M
3 1 L
4 1 XL
5 2 Black
6 2 White
7 2 Red
8 3 Cotton
9 3 Polyester

ในตัวอย่างนี้, คอลัมน์ id เป็น Primary Key ที่ใช้ในการระบุรายการค่าคุณสมบัติแต่ละรายการ คอลัมน์ attribute_id เป็น Foreign Key ที่เชื่อมโยงกับตาราง attributes ซึ่งเป็นคอลัมน์ที่ใช้เก็บรหัสคุณสมบัติ ส่วนคอลัมน์ value เป็นคอลัมน์ที่ใช้เก็บค่าคุณสมบัติของสินค้า ตัวอย่างเช่น ขนาดตัวอักษร (S, M, L, XL) สี (Black, White, Red) และวัสดุ (Cotton, Polyester)

 

  1. ตาราง product_attributes ที่เก็บข้อมูลความสัมพันธ์ระหว่างสินค้ากับคุณสมบัติจะประกอบด้วยคอลัมน์ดังนี้:

    Column Name Data Type Description
    id (PK) INT รหัสความสัมพันธ์
    product_id (FK) INT รหัสสินค้า (Foreign Key จากตาราง products)
    attribute_id (FK) INT รหัสคุณสมบัติ (Foreign Key จากตาราง attributes)

         - คอลัมน์ id เป็น Primary Key ที่ใช้ในการระบุรหัสความสัมพันธ์
         - คอลัมน์ product_id เป็น Foreign Key ที่เชื่อมโยงกับตาราง products เพื่อแสดงความสัมพันธ์กับสินค้า
         - คอลัมน์ attribute_id เป็น Foreign Key ที่เชื่อมโยงกับตาราง attributes เพื่อแสดงความสัมพันธ์กับคุณสมบัติของสินค้า

ตัวอย่างข้อมูลในตาราง product_attributes:

id product_id attribute_id
1 1001 1
2 1001 2
3 1002 1
4 1002 3
5 1002 4

 

- สินค้าที่มีรหัสสินค้าเป็น 1001 มีคุณสมบัติ 2 คุณสมบัติคือ 1 และ 2
- สินค้าที่มีรหัสสินค้าเป็น 1002 มีคุณสมบัติ 3 คุณสมบัติคือ 1, 3 และ 4

  1. ตาราง product_variations ที่เก็บข้อมูลสินค้าย่อย (Variations) จะมีรูปแบบดังนี้:

    Column Name Data Type Description
    id (PK) INT รหัสสินค้าย่อย
    product_id (FK) INT รหัสสินค้า (Foreign Key จากตาราง products)
    sku VARCHAR(255) รหัสสินค้าย่อย (Stock Keeping Unit)
    price DECIMAL(10,2) ราคาของสินค้าย่อย

 

ตัวอย่างสำหรับตาราง product_variations ที่เก็บข้อมูลสินค้าย่อย (Variations) จะประกอบด้วยคอลัมน์ดังนี้:

id product_id sku price
1 1 TSB-0001-S 250
2 1 TSB-0001-M 250
3 1 TSB-0001-L 250
4 1 TSB-0001-XL 250
5 2 TSW-0001-S 250
6 2 TSW-0001-M 250
7 2 TSW-0001-L 250
8 2 TSW-0001-XL 250
9 3 HDB-0001-S 650
10 3 HDB-0001-M 650
11 3 HDB-0001-L 650
12 3 HDB-0001-XL 650
13 4 HDG-0001-S 650
14 4 HDG-0001-M 650
15 4 HDG-0001-L 650
16 4 HDG-0001-XL 650

ในตัวอย่างนี้, คอลัมน์ id เป็น Primary Key ที่ใช้ในการระบุรายการสินค้าย่อยแต่ละรายการ คอลัมน์ product_id เป็น Foreign Key ที่เชื่อมโยงกับตาราง products และเป็นคอลัมน์ที่ใช้เก็บรหัสสินค้าหลัก คอลัมน์ sku เป็นคอลัมน์ที่ใช้เก็บรหัสสินค้าย่อย (Stock Keeping Unit) ของแต่ละสินค้าย่อย และคอลัมน์ price เป็นคอลัมน์ที่ใช้เก็บราคาของสินค้าย่อยในแต่ละแบบซึ่งอาจแตกต่างกันไปตามคุณสมบัติของสินค้าย่อยแต่ละตัว

  1. ตาราง product_variation_attributes: เก็บข้อมูลความสัมพันธ์ระหว่างสินค้าย่อยกับค่าคุณสมบัติ

id (PK): รหัสความสัมพันธ์
variation_id (FK): รหัสสินค้าย่อย
attribute_id (FK): รหัสคุณสมบัติ
attribute_value_id (FK): รหัสค่าคุณสมบัติ

โดยที่ data type เป็นดังนี้

id: INT
variation_id: INT
attribute_id: INT
attribute_value_id: INT

ตัวอย่างสำหรับตาราง product_variation_attributes: เก็บข้อมูลความสัมพันธ์ระหว่างสินค้าย่อยกับค่าคุณสมบัติ ดังนี้

id variation_id attribute_id attribute_value_id
1 1 1 1
2 1 2 3
3 2 1 2
4 2 2 4

โดยที่ตารางนี้เก็บข้อมูลความสัมพันธ์ระหว่างสินค้าย่อยกับค่าคุณสมบัติ โดยใช้ id เป็น primary key และเชื่อมตารางนี้กับตารางสินค้าย่อย (product_variations) และตารางค่าคุณสมบัติ (attribute_values) ด้วย foreign key ที่เก็บไว้ใน column variation_id, attribute_id, และ attribute_value_id ตามลำดับ

    7.ตาราง product_variation_stock ใช้ในการเก็บข้อมูลสต็อกสินค้าย่อย (Variations) โดยมีคอลัมน์หลักๆ ดังนี้:
       id (PK): รหัสสต็อกสินค้าย่อย (Primary Key)
       variation_id (FK): รหัสสินค้าย่อย (Foreign Key ที่เชื่อมโยงกับตาราง product_variations)
       stock_quantity: ปริมาณสต็อกสินค้า
       stock_status: สถานะสต็อกสินค้า (in_stock, out_of_stock, backorder, pre_order หรือ ค่าอื่นๆ ตามที่กำหนด)
      low_stock_threshold: ค่าเกณฑ์ต่ำสุดสำหรับสต็อกสินค้า (เมื่อสต็อกลดลงเหลือเท่ากับหรือน้อยกว่าค่านี้ ระบบจะแจ้งเตือนหรือดำเนินการตามที่กำหนด)

       Data type ที่ใช้ในตาราง product_variation_stock มีดังนี้

id: integer
variation_id: integer
stock_quantity: integer
stock_status: string
low_stock_threshold: integer

ตัวอย่างสำหรับตาราง product_variation_stock:

id variation_id stock_quantity stock_status low_stock_threshold
1 1 50 in_stock 10
2 2 0 out_of_stock 10
3 3 25 in_stock 10

ออกแบบฐานข้อมูล discount table 

ออกแบบตารางส่วนลด (discount table)  คุณสามารถมีตารางที่สามารถจัดการประเภทส่วนลด ความสัมพันธ์ระหว่างสินค้ากับส่วนลด และข้อมูลส่วนลดเอง ตัวอย่างตารางมีดังนี้:

  1. ตาราง discount_types: เก็บข้อมูลประเภทส่วนลด

    id (PK): รหัสประเภทส่วนลด
    name: ชื่อประเภทส่วนลด

    ตัวอย่างสำหรับตาราง discount_types ที่เก็บข้อมูลประเภทส่วนลดจะประกอบด้วยคอลัมน์ดังนี้:

    id name
    1 ส่วนลดเปอร์เซ็นต์
    2 ส่วนลดจำนวนเงิน

    ในตัวอย่างนี้, คอลัมน์ id เป็น Primary Key ที่ใช้ในการระบุรหัสประเภทส่วนลด ส่วนคอลัมน์ name เป็นคอลัมน์ที่ใช้เก็บชื่อประเภทส่วนลดที่เป็นไปได้ในระบบของร้านค้า โดยในตัวอย่างนี้มีสองประเภทส่วนลดคือ ส่วนลดเปอร์เซ็นต์ และส่วนลดจำนวนเงิน

  1. ตาราง discounts: เก็บข้อมูลส่วนลด

    id (PK): รหัสส่วนลด
    discount_type_id (FK): รหัสประเภทส่วนลด
    name: ชื่อส่วนลด
    value: มูลค่าส่วนลด (เปอร์เซ็นต์หรือจำนวนเงิน)
    start_date: วันเริ่มต้นส่วนลด
    end_date: วันสิ้นสุดส่วนลด
    min_purchase: จำนวนซื้อขั้นต่ำ (ถ้ามี)
    max_discount_amount: จำนวนส่วนลดสูงสุด (ถ้ามี)

    ตัวอย่างสำหรับตาราง discounts ที่เก็บข้อมูลส่วนลดจะประกอบด้วยคอลัมน์ดังนี้:

    id discount_type_id name value start_date end_date min_purchase max_discount_amount
    1 1 ส่วนลด 10% 10 2023-04-01 2023-04-30 1000  
    2 2 ส่วนลด 100 บาท 100 2023-04-15 2023-05-15 5000 500
    3 1 ส่วนลด 5% 5 2023-05-01 2023-05-31 500  

    ในตัวอย่างนี้, คอลัมน์ id เป็น Primary Key ที่ใช้ในการระบุรหัสส่วนลด คอลัมน์ discount_type_id เป็น Foreign Key ที่เชื่อมโยงกับตาราง discount_types และเป็นคอลัมน์ที่ใช้เก็บรหัสประเภทส่วนลด คอลัมน์ name เป็นคอลัมน์ที่ใช้เก็บชื่อส่วนลด คอลัมน์ value เป็นคอลัมน์ที่ใช้เก็บมูลค่าส่วนลด เป็นเปอร์เซ็นต์หรือจำนวนเงิน คอลัมน์ start_date เป็นคอลัมน์ที่ใช้เก็บวันที่เริ่มต้นของส่วนลด คอลัมน์ end_date เป็นคอลัมน์ที่ใช้เก็บวันที่สิ้นสุดของส่วนลด คอลัมน์ min_purchase เป็นคอลัมน์ที่ใช้เก็บจำนวนซื้อขั้นต่ำที่ต้องการใช้ส่วนลด (ถ้ามี) ส่วนคอลัมน์ max_discount_amount เป็นคอลัมน์ที่ใช้เก็บจำนวนส่วนลดสูงสุดที่สามารถใช้ได้ (ถ้ามี)

  1. ตาราง product_discounts: เก็บข้อมูลความสัมพันธ์ระหว่างสินค้ากับส่วนลด
    id (PK): รหัสความสัมพันธ์
    product_id (FK): รหัสสินค้า
    discount_id (FK): รหัสส่วนลด

    ตัวอย่างสำหรับตาราง product_discounts ที่เก็บข้อมูลความสัมพันธ์ระหว่างสินค้ากับส่วนลดจะประกอบด้วยคอลัมน์ดังนี้:

    id product_id discount_id
    1 1 1
    2 1 3
    3 2 2

    ในตัวอย่างนี้, คอลัมน์ id เป็น Primary Key ที่ใช้ในการระบุรหัสความสัมพันธ์ระหว่างสินค้ากับส่วนลด คอลัมน์ product_id เป็น Foreign Key ที่เชื่อมโยงกับตาราง products และเป็นคอลัมน์ที่ใช้เก็บรหัสสินค้า คอลัมน์ discount_id เป็น Foreign Key ที่เชื่อมโยงกับตาราง discounts และเป็นคอลัมน์ที่ใช้เก็บรหัสส่วนลด ดังนั้น, ความสัมพันธ์ในตาราง product_discounts จะแสดงว่าสินค้าในตาราง products ได้รับส่วนลดในตาราง discounts ได้แบบนี้:
       - สินค้าที่มีรหัสสินค้าเป็น 1 ได้รับส่วนลดทั้งสองประเภท (รหัสส่วนลด 1 และ 3)
       - สินค้าที่มีรหัสสินค้าเป็น 2 ได้รับส่วนลดประเภทเดียว (รหัสส่วนลด 2)

  1. ตาราง product_variation_discounts: เก็บข้อมูลความสัมพันธ์ระหว่างสินค้าย่อยกับส่วนลด

    id (PK): รหัสความสัมพันธ์
    variation_id (FK): รหัสสินค้าย่อย
    discount_id (FK): รหัสส่วนลด

    ตัวอย่างสำหรับตาราง product_variation_discounts ที่เก็บข้อมูลความสัมพันธ์ระหว่างสินค้าย่อยกับส่วนลดจะประกอบด้วยคอลัมน์ดังนี้:

    id variation_id discount_id
    1 1 1
    2 1 3
    3 2 2

    ในตัวอย่างนี้, คอลัมน์ id เป็น Primary Key ที่ใช้ในการระบุรหัสความสัมพันธ์ระหว่างสินค้าย่อยกับส่วนลด คอลัมน์ variation_id เป็น Foreign Key ที่เชื่อมโยงกับตาราง product_variations และเป็นคอลัมน์ที่ใช้เก็บรหัสสินค้าย่อย คอลัมน์ discount_id เป็น Foreign Key ที่เชื่อมโยงกับตาราง discounts และเป็นคอลัมน์ที่ใช้เก็บรหัสส่วนลด ดังนั้น, ความสัมพันธ์ในตาราง product_variation_discounts จะแสดงว่าสินค้าย่อยในตาราง product_variations ได้รับส่วนลดในตาราง discounts ได้แบบนี้:

       - สินค้าย่อยที่มีรหัสสินค้าย่อยเป็น 1 ได้รับส่วนลดทั้งสองประเภท (รหัสส่วนลด 1 และ 3)
       - สินค้าย่อยที่มีรหัสสินค้าย่อยเป็น 2 ได้รับส่วนลดประเภทเดียว (รหัสส่วนลด 2)

 

 

SQL ฐานข้อมูลสินค้าแบบ Variable product

โดย Variable product หมายถึง สินค้าที่มีคุณสมบัติหลายรูปแบบหรือตัวเลือกสินค้าย่อย ที่มีรหัสสินค้าแตกต่างกันตามคุณสมบัติแต่ละตัว เช่น ตัวเลือกสีหรือขนาดของเสื้อผ้า

เราสามารถออกแบบฐานข้อมูลสินค้าแบบ Variable product ด้วยตารางข้อมูลต่อไปนี้:

- products (ตารางหลักของสินค้า)
- product_attributes (ตารางคุณสมบัติของสินค้า)
- attribute_values (ตารางค่าคุณสมบัติของสินค้า)
- product_variations (ตารางสินค้าย่อยหรือตัวเลือกสินค้า)
- product_variation_attributes (ตารางความสัมพันธ์ระหว่างสินค้าย่อยกับค่าคุณสมบัติ)
- product_variation_stock (ตารางสต็อกสินค้าย่อย)
- discounts (ตารางส่วนลด)
- discount_types (ตารางประเภทส่วนลด)
- product_discounts (ตารางความสัมพันธ์ระหว่างสินค้ากับส่วนลด)
- product_variation_discounts (ตารางความสัมพันธ์ระหว่างสินค้าย่อยกับส่วนลด)

ดังนั้นเราสามารถสร้างฐานข้อมูล Variable product ด้วย SQL ดังนี้:

ตาราง products:

CREATE TABLE products ( id INT PRIMARY KEY, name VARCHAR(255), sku VARCHAR(50), price DECIMAL(10,2) );

ตาราง attributes:

CREATE TABLE attributes ( id INT PRIMARY KEY, name VARCHAR(255) );

ตาราง attribute_values:

CREATE TABLE attribute_values ( id INT PRIMARY KEY, attribute_id INT, value VARCHAR(255), FOREIGN KEY (attribute_id) REFERENCES attributes(id) );

ตาราง product_attributes:

CREATE TABLE product_attributes ( id INT PRIMARY KEY, product_id INT, attribute_id INT, FOREIGN KEY (product_id) REFERENCES products(id), FOREIGN KEY (attribute_id) REFERENCES attributes(id) );

ตาราง product_variations:

CREATE TABLE product_variations ( id INT PRIMARY KEY, product_id INT, sku VARCHAR(50), price DECIMAL(10,2), FOREIGN KEY (product_id) REFERENCES products(id) );

ตาราง product_variation_attributes:

CREATE TABLE product_variation_attributes ( id INT PRIMARY KEY, variation_id INT, attribute_value_id INT, FOREIGN KEY (variation_id) REFERENCES product_variations(id), FOREIGN KEY (attribute_value_id) REFERENCES attribute_values(id) );

ตาราง product_variation_stock:

CREATE TABLE product_variation_stock ( id INT PRIMARY KEY, variation_id INT, stock_quantity INT, stock_status VARCHAR(20), low_stock_threshold INT, FOREIGN KEY (variation_id) REFERENCES product_variations(id) );

ตาราง discount_types:

CREATE TABLE discount_types ( id INT PRIMARY KEY, name VARCHAR(255) );

ตาราง discounts:

CREATE TABLE discounts ( id INT PRIMARY KEY, discount_type_id INT, name VARCHAR(255), value DECIMAL(10,2), start_date DATE, end_date DATE, min_purchase DECIMAL(10,2), max_discount_amount DECIMAL(10,2), FOREIGN KEY (discount_type_id) REFERENCES discount_types(id) );

ตาราง product_discounts:

CREATE TABLE product_discounts ( id INT PRIMARY KEY, product_id INT, discount_id INT, FOREIGN KEY (product_id) REFERENCES products(id), FOREIGN KEY (discount_id) REFERENCES discounts(id) );

ตาราง product_variation_discounts:

CREATE TABLE product_variation_discounts ( id INT PRIMARY KEY, variation_id INT, discount_id INT, FOREIGN KEY (variation_id) REFERENCES product_variations(id), FOREIGN KEY (discount_id) REFERENCES discounts(id) );

หนังสือพัฒนาตัวเอง

จุดเริ่มต้นที่ชัดเจน

เว็บไซต์หรือแอปพลิเคชั่นของคุณเริ่มต้นที่นี่

ลงทะเบียนแล้วเราจะส่งข้อเสนอที่ดีที่สุดให้กับคุณ