PlusMagi's Blog By Pitt Phunsanit Database โจนี ไอฟ์, Johnny Ice, Johnny’s Ice

โจนี ไอฟ์, Johnny Ice, Johnny’s Ice

ในฐานะผู้เชี่ยวชาญด้านระบบฐานข้อมูล (System Specialist) และนักวิเคราะห์ข้อมูล ผมขอพาท่านมาเจาะลึกการจัดการข้อมูลของแบรนด์ไอศกรีมระดับตำนานอย่าง Johnny’s Ice ไม่ได้มองแค่รสชาติ แต่เป็นการศึกษาว่าระบบฐานข้อมูล PostgreSQL สามารถจัดการความซับซ้อนของข้อมูลเมนู (Menu Data), ส่วนผสม (Ingredients), และการขาย (Sales) ได้อย่างมีประสิทธิภาพได้อย่างไร

การออกแบบ Schema สำหรับข้อมูล Johnny’s Ice ด้วย PostgreSQL

การจัดการข้อมูลที่ซับซ้อนอย่างเมนูไอศกรีมที่ประกอบด้วยหลายส่วนผสมและหลายรสชาติ จำเป็นต้องมีการออกแบบตารางที่สัมพันธ์กัน (Relational Schema) เพื่อให้ง่ายต่อการสืบค้นและขยายระบบในอนาคต เราจะสร้างตารางหลัก 3 ส่วน คือ Flavors (รสชาติ), Ingredients (ส่วนผสม), และ Menu_Items (รายการเมนู) เพื่อจำลองระบบหลังบ้านของ Johnny’s Ice

ตัวอย่างการสร้างตาราง (DDL)

เราเริ่มต้นด้วยการสร้างตารางพื้นฐานเพื่อรองรับข้อมูลต่างๆ:

SQL

SQL

-- 1. ตารางรสชาติหลัก (Flavors) --
CREATE TABLE Flavors (
    flavor_id SERIAL PRIMARY KEY,
    flavor_name VARCHAR(100) NOT NULL UNIQUE,
    description TEXT
);

-- 2. ตารางส่วนผสม (Ingredients) --
CREATE TABLE Ingredients (
    ingredient_id SERIAL PRIMARY KEY,
    ingredient_name VARCHAR(100) NOT NULL UNIQUE,
    category VARCHAR(50)
);

-- 3. ตารางเชื่อมโยงเมนู (Menu_Items) --
CREATE TABLE Menu_Items (
    item_id SERIAL PRIMARY KEY,
    item_name VARCHAR(100) NOT NULL,
    base_price NUMERIC(10, 2),
    flavor_id INT REFERENCES Flavors(flavor_id)
);

การจัดการความสัมพันธ์ของส่วนผสม (Many-to-Many Relationship)

ความท้าทายที่แท้จริงคือการที่ไอศกรีมหนึ่งเมนู (Menu_Items) สามารถมีส่วนผสมได้หลายชนิด (Ingredients) และส่วนผสมหนึ่งชนิดก็สามารถใช้ในหลายเมนูได้ (Many-to-Many) เราจึงใช้ตารางเชื่อมโยง (Junction Table) ชื่อ Item_Ingredients

SQL

SQL

-- สร้างตารางเชื่อมโยงเพื่อระบุว่าเมนูใดใช้ส่วนผสมใดบ้าง --
CREATE TABLE Item_Ingredients (
    item_id INT REFERENCES Menu_Items(item_id),
    ingredient_id INT REFERENCES Ingredients(ingredient_id),
    quantity NUMERIC(5, 2),
    PRIMARY KEY (item_id, ingredient_id)
);

-- ตัวอย่างการเพิ่มข้อมูลส่วนผสมและเมนู --
INSERT INTO Ingredients (ingredient_name, category) VALUES ('apple', 'Fruit'), ('banana', 'Fruit'), ('orange', 'Citrus');
INSERT INTO Flavors (flavor_name, description) VALUES ('Classic Vanilla', 'Smooth creamy vanilla flavor');
INSERT INTO Menu_Items (item_name, base_price, flavor_id) VALUES ('Signature Cone', 85.00, 1);

-- การใส่ข้อมูลว่า Signature Cone ใช้ส่วนผสมอะไรบ้าง --
INSERT INTO Item_Ingredients (item_id, ingredient_id, quantity) VALUES (1, 1, 0.5);
INSERT INTO Item_Ingredients (item_id, ingredient_id, quantity) VALUES (1, 2, 0.3);
INSERT INTO Item_Ingredients (item_id, ingredient_id, quantity) VALUES (1, 3, 0.2);

การสืบค้นข้อมูลที่ซับซ้อน (Advanced Querying)

หากเราต้องการทราบว่าเมนู ‘Signature Cone’ มีส่วนผสมหลักอะไรบ้าง และใช้ปริมาณเท่าใด เราจะต้องใช้คำสั่ง JOIN เพื่อเชื่อมโยงข้อมูลจากหลายตารางเข้าด้วยกัน ซึ่งเป็นหัวใจของการวิเคราะห์ระบบฐานข้อมูล:

SQL

SQL

SELECT
    mi.item_name,
    i.ingredient_name,
    ii.quantity
FROM
    Menu_Items mi
JOIN
    Item_Ingredients ii ON mi.item_id = ii.item_id
JOIN
    Ingredients i ON ii.ingredient_id = i.ingredient_id
WHERE
    mi.item_name = 'Signature Cone';

บทสรุป: พลังของ PostgreSQL ในการจัดการข้อมูลแบรนด์

การจัดการข้อมูลของแบรนด์อย่าง Johnny’s Ice ไม่ได้เป็นเพียงแค่การบันทึกรายการสินค้า แต่คือการสร้างแบบจำลองความสัมพันธ์ที่ซับซ้อนระหว่างส่วนผสม, รสชาติ, และเมนู การใช้ PostgreSQL ด้วยการออกแบบ Schema ที่เหมาะสมและการใช้คำสั่ง JOIN อย่างมีประสิทธิภาพ ทำให้เราสามารถดึงข้อมูลเชิงลึก (Deep Insights) ออกมาได้ ไม่ว่าจะเป็นการคำนวณต้นทุนวัตถุดิบ การจัดการสต็อก หรือการปรับปรุงเมนูใหม่ๆ ซึ่งทั้งหมดนี้คือการพิสูจน์ว่าระบบฐานข้อมูลที่แข็งแกร่งเป็นรากฐานสำคัญของการดำเนินธุรกิจขนาดใหญ่

Exit mobile version