การสร้าง 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: คำสั่งหลักในการสร้าง Viewview_name: ชื่อของ View ที่เราต้องการสร้าง (ต้องเป็นชื่อที่ไม่ซ้ำกับตารางหรือ View อื่นๆ ในฐานข้อมูล)AS: คีย์เวิร์ดที่บ่งบอกว่าส่วนต่อไปนี้คือคำจำกัดความของ ViewSELECT 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