メインコンテンツへ移動

เนื้อหาภาษาไทย / タイ語のコンテンツ

システムガイド 内容確認済み

การสร้าง View (CREATE VIEW)

บทความนี้กล่าวถึงวิธีการสร้าง View ใน MySQL โดยใช้คำสั่ง `CREATE VIEW` พร้อมทั้งอธิบายไวยากรณ์, ตัวอย่างการสร้าง View อย่างง่ายและซับซ้อน, แนวทางการตั้งชื่อ Vie...

การสร้าง View (CREATE VIEW)

ในบทที่แล้ว เราได้ทำความเข้าใจว่า View คืออะไร มีประโยชน์อย่างไร และช่วยให้การจัดการฐานข้อมูลของเราง่ายขึ้นได้อย่างไร ในบทนี้ เราจะมาลงมือสร้าง View จริงๆ โดยใช้คำสั่ง CREATE VIEW ใน MySQL

ไวยากรณ์ของ CREATE VIEW

คำสั่ง CREATE VIEW ใช้เพื่อสร้าง View โดยมีไวยากรณ์พื้นฐานดังนี้:

CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

อธิบายส่วนประกอบ:

  • CREATE VIEW: คำสั่งหลักในการสร้าง View
  • view_name: ชื่อของ View ที่เราต้องการสร้าง (ต้องเป็นชื่อที่ไม่ซ้ำกับตารางหรือ View อื่นๆ ในฐานข้อมูล)
  • AS: คีย์เวิร์ดที่บ่งบอกว่าส่วนต่อไปนี้คือคำจำกัดความของ View
  • SELECT column1, column2, ... FROM table_name WHERE condition;: Query ที่ใช้ในการดึงข้อมูลสำหรับ View ซึ่ง Query นี้สามารถซับซ้อนได้ตามต้องการ

ตัวอย่างการสร้าง View

สมมติว่าเรามีตาราง customers ที่เก็บข้อมูลลูกค้าดังนี้:

CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    city VARCHAR(50),
    country VARCHAR(50)
);

INSERT INTO customers (customer_id, first_name, last_name, city, country) VALUES
(1, 'John', 'Doe', 'New York', 'USA'),
(2, 'Jane', 'Smith', 'London', 'UK'),
(3, 'Peter', 'Jones', 'Paris', 'France'),
(4, 'Maria', 'Garcia', 'Madrid', 'Spain'),
(5, 'Ken', 'Suzuki', 'Tokyo', 'Japan');

และเราต้องการสร้าง View ที่แสดงชื่อเต็มของลูกค้า (first_name และ last_name รวมกัน) และเมืองที่พวกเขาอาศัยอยู่ เราสามารถทำได้ดังนี้:

CREATE VIEW customer_names_and_cities AS
SELECT CONCAT(first_name, ' ', last_name) AS full_name, city
FROM customers;

คำสั่งนี้จะสร้าง View ชื่อ customer_names_and_cities ซึ่งจะประกอบด้วยสองคอลัมน์คือ full_name และ city โดย full_name มาจากการรวมกันของ first_name และ last_name

หลังจากสร้าง View แล้ว เราสามารถ Query View ได้เหมือนกับ Query ตารางปกติ:

SELECT * FROM customer_names_and_cities;

ผลลัพธ์ที่ได้:

+-------------+-----------+
| full_name   | city      |
+-------------+-----------+
| John Doe    | New York  |
| Jane Smith  | London    |
| Peter Jones | Paris     |
| Maria Garcia| Madrid    |
| Ken Suzuki  | Tokyo     |
+-------------+-----------+

การตั้งชื่อ View ที่สื่อความหมาย

การตั้งชื่อ View ที่ดีเป็นสิ่งสำคัญเพื่อให้ง่ายต่อการเข้าใจว่า View นั้นมีหน้าที่อะไร และข้อมูลอะไรที่ View นำเสนอ นี่คือแนวทางปฏิบัติบางส่วนในการตั้งชื่อ View:

  • ใช้คำอธิบาย: ชื่อ View ควรบอกได้ว่า View นั้นเกี่ยวกับอะไร เช่น active_customers, product_sales_by_category
  • หลีกเลี่ยงคำย่อที่ไม่ชัดเจน: ใช้คำเต็มเพื่อความเข้าใจที่ชัดเจน
  • ใช้คำนำหน้าหรือคำต่อท้าย: บางครั้งการใช้คำนำหน้าหรือคำต่อท้าย (เช่น vw_ หรือ _view) สามารถช่วยแยกแยะ View ออกจากตารางได้ง่ายขึ้น
  • สอดคล้อง: ใช้รูปแบบการตั้งชื่อที่สอดคล้องกันในทุก View เพื่อให้ง่ายต่อการจัดการ

ในตัวอย่างก่อนหน้า customer_names_and_cities เป็นชื่อที่สื่อความหมายได้ดี เพราะบอกว่า View นี้แสดงชื่อและเมืองของลูกค้า

เหตุผลเชิงออกแบบและ Trade-offs

การใช้ View มีข้อดีหลายประการ แต่ก็มีข้อควรพิจารณาบางอย่างที่ต้องคำนึงถึง:

  • ความซับซ้อนของ Query: View สามารถซ่อนความซับซ้อนของ Query ที่ใช้บ่อยได้ ทำให้ Query ที่เราเขียนสั้นลงและง่ายต่อการอ่าน แต่ถ้า View ซับซ้อนเกินไป อาจทำให้ยากต่อการทำความเข้าใจและแก้ไข
  • ประสิทธิภาพ: View ไม่ได้เก็บข้อมูลจริง ดังนั้นเมื่อเรา Query View ระบบจะต้องรัน Query ที่ View กำหนดไว้ทุกครั้ง ซึ่งอาจส่งผลต่อประสิทธิภาพ หาก View นั้นซับซ้อนมาก อย่างไรก็ตาม MySQL มี optimization บางอย่างที่สามารถช่วยลดผลกระทบนี้ได้
  • การบำรุงรักษา: เมื่อโครงสร้างของตารางพื้นฐานเปลี่ยนแปลง เราอาจต้องแก้ไข View ที่อ้างอิงถึงตารางนั้นด้วย ดังนั้นการวางแผนและออกแบบ View อย่างรอบคอบจึงเป็นสิ่งสำคัญ
  • ความปลอดภัย: View สามารถใช้เพื่อจำกัดการเข้าถึงข้อมูลได้ โดยการอนุญาตให้ผู้ใช้เข้าถึงเฉพาะ View ที่แสดงข้อมูลที่พวกเขาต้องการเท่านั้น แต่ต้องระวังว่า View ไม่ได้เป็น "กำแพง" ที่สมบูรณ์แบบ ผู้ที่มีความรู้ความสามารถก็อาจสามารถ bypass View และเข้าถึงข้อมูลพื้นฐานได้โดยตรง

แนวปฏิบัติที่ดีในการสร้าง View

เพื่อให้การใช้ View เป็นไปอย่างมีประสิทธิภาพและลดปัญหาที่อาจเกิดขึ้น นี่คือแนวปฏิบัติที่ดีบางส่วน:

  • สร้าง View ที่มีจุดประสงค์ชัดเจน: แต่ละ View ควรมีหน้าที่เฉพาะเจาะจง และไม่ซับซ้อนเกินไป
  • ใช้ชื่อ View ที่สื่อความหมาย: ดังที่กล่าวไปแล้ว การตั้งชื่อที่ดีช่วยให้เข้าใจ View ได้ง่ายขึ้น
  • ทดสอบ View อย่างละเอียด: ก่อนที่จะใช้งาน View จริง ควรตรวจสอบให้แน่ใจว่า View ทำงานได้อย่างถูกต้องและให้ผลลัพธ์ที่ต้องการ
  • Document View: เขียนคำอธิบายเกี่ยวกับ View เพื่อให้ผู้อื่นเข้าใจว่า View นั้นมีหน้าที่อะไร ข้อมูลอะไรที่ View นำเสนอ และมีข้อจำกัดอะไรบ้าง
  • ตรวจสอบประสิทธิภาพ: หาก View มีผลกระทบต่อประสิทธิภาพ ควรพิจารณาปรับปรุง Query ที่ใช้ใน View หรือใช้เทคนิคอื่น ๆ เช่น Index

ตัวอย่างการสร้าง View ที่ซับซ้อนขึ้น

สมมติว่าเรามีตาราง orders ที่เก็บข้อมูลการสั่งซื้อ:

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    order_date DATE,
    total_amount DECIMAL(10, 2),
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

INSERT INTO orders (order_id, customer_id, order_date, total_amount) VALUES
(1, 1, '2023-01-15', 100.00),
(2, 2, '2023-02-20', 250.00),
(3, 1, '2023-03-10', 75.50),
(4, 3, '2023-04-05', 120.00),
(5, 2, '2023-05-12', 300.00);

เราสามารถสร้าง View ที่แสดงชื่อเต็มของลูกค้า, เมือง, และยอดรวมการสั่งซื้อของลูกค้าแต่ละคนได้ดังนี้:

CREATE VIEW customer_order_summary AS
SELECT
    CONCAT(c.first_name, ' ', c.last_name) AS full_name,
    c.city,
    SUM(o.total_amount) AS total_order_amount
FROM
    customers c
JOIN
    orders o ON c.customer_id = o.customer_id
GROUP BY
    c.customer_id;

View นี้จะรวมข้อมูลจากตาราง customers และ orders โดยใช้ JOIN และคำนวณยอดรวมการสั่งซื้อของลูกค้าแต่ละคนโดยใช้ฟังก์ชัน SUM() และ GROUP BY

การ Query View นี้:

SELECT * FROM customer_order_summary;

ผลลัพธ์ที่ได้:

+-------------+-----------+--------------------+
| full_name   | city      | total_order_amount |
+-------------+-----------+--------------------+
| John Doe    | New York  |             175.50 |
| Jane Smith  | London    |             550.00 |
| Peter Jones | Paris     |             120.00 |
+-------------+-----------+--------------------+

จะเห็นได้ว่า View สามารถรวมข้อมูลจากหลายตารางและทำการคำนวณที่ซับซ้อนได้ ทำให้การดึงข้อมูลที่เราต้องการง่ายขึ้นมาก

สรุป

ในบทนี้ เราได้เรียนรู้วิธีการสร้าง View โดยใช้คำสั่ง CREATE VIEW, วิธีการตั้งชื่อ View ที่สื่อความหมาย, เหตุผลเชิงออกแบบและ Trade-offs, และแนวปฏิบัติที่ดีในการสร้าง View การสร้าง View เป็นเครื่องมือที่มีประโยชน์ในการจัดการฐานข้อมูล MySQL ช่วยลดความซับซ้อนของ Query, เพิ่มความปลอดภัย, และทำให้การทำงานกับข้อมูลเป็นไปอย่างมีประสิทธิภาพมากขึ้น ในบทต่อไป เราจะเรียนรู้วิธีการแก้ไข View ที่สร้างไปแล้วด้วยคำสั่ง ALTER VIEW

Office.in.th Custom Service

この構成をもとにシステムを開発・カスタマイズしたいですか?

Office.in.th は、エンタープライズ Web アプリケーション、API 連携、官民の業務管理システムの設計・開発を承り、長期的なサポートも提供します。

ソフトウェア開発サービスを見る