ข้ามไปยังเนื้อหาหลัก
คู่มือระบบ เนื้อหาผ่านการตรวจสอบแล้ว

View คืออะไร?

View ใน MySQL คือ "ตารางเสมือน" ที่ไม่ได้เก็บข้อมูลจริง แต่สร้างจากผลลัพธ์ของ Query ที่บันทึกไว้ ซึ่งช่วยลดความซับซ้อนของ Query ที่ใช้บ่อย และเพิ่มความปลอดภัยโด...

View คืออะไร?

ในโลกของฐานข้อมูล MySQL, View เปรียบเสมือน "ตารางเสมือน" ที่ไม่ได้เก็บข้อมูลจริง แต่สร้างขึ้นจากผลลัพธ์ของ Query ที่ถูกบันทึกไว้ เมื่อเราเรียกใช้ View, MySQL จะรัน Query ที่ถูกบันทึกไว้และแสดงผลลัพธ์ออกมา เหมือนกับว่าเรากำลังเรียกใช้ตารางจริงๆ

Query ที่ถูกบันทึก

หัวใจสำคัญของ View คือการเป็น Query ที่ถูกบันทึกไว้ นั่นหมายความว่า View จะเก็บ Query `SELECT` ที่ซับซ้อน ซึ่งอาจเกี่ยวข้องกับการ JOIN หลายตาราง, การใช้ฟังก์ชัน aggregate (เช่น COUNT(), SUM(), AVG()), หรือการใช้ Clause ต่างๆ เช่น WHERE, GROUP BY, HAVING เมื่อเราสร้าง View, เรากำลังบันทึก Query เหล่านั้นไว้ในฐานข้อมูล

ตัวอย่าง: สมมติว่าเรามีฐานข้อมูลสำหรับร้านค้าออนไลน์ ซึ่งมีตาราง customers (ข้อมูลลูกค้า) และตาราง orders (ข้อมูลการสั่งซื้อ) เราต้องการ View ที่แสดงชื่อลูกค้าและจำนวนการสั่งซื้อทั้งหมดของลูกค้าแต่ละคน Query สำหรับสิ่งนี้อาจเป็น:

SELECT
    c.customer_id,
    c.customer_name,
    COUNT(o.order_id) AS total_orders
FROM
    customers c
LEFT JOIN
    orders o ON c.customer_id = o.customer_id
GROUP BY
    c.customer_id, c.customer_name;

เราสามารถสร้าง View จาก Query นี้ได้ และเมื่อเราเรียกใช้ View, เราจะได้ผลลัพธ์เหมือนกับการรัน Query ข้างต้น

ช่วยลดความซับซ้อน

ประโยชน์หลักอย่างหนึ่งของ View คือการลดความซับซ้อนของ Query ที่ต้องใช้บ่อยๆ แทนที่จะต้องเขียน Query ที่ซับซ้อนซ้ำๆ ทุกครั้ง, เราสามารถสร้าง View เพียงครั้งเดียว และเรียกใช้ View นั้นได้ทุกเมื่อที่ต้องการ

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

  • Readability: View ช่วยให้ Query หลักของเราสั้นและเข้าใจง่ายขึ้น เนื่องจากความซับซ้อนถูกซ่อนไว้ใน View
  • Maintainability: หากโครงสร้างของตารางพื้นฐานเปลี่ยนแปลง, เราสามารถแก้ไข View เพื่อให้ยังคงให้ผลลัพธ์ที่ถูกต้อง โดยไม่ต้องแก้ไข Query ที่เรียกใช้ View
  • Performance: View ไม่ได้ปรับปรุงประสิทธิภาพโดยอัตโนมัติ การเรียกใช้ View ยังคงต้องรัน Query ที่ถูกบันทึกไว้ อย่างไรก็ตาม, การใช้ View สามารถช่วยให้ Optimizer ของ MySQL ทำงานได้ดีขึ้นในบางกรณี
  • Overhead: การสร้าง View จำนวนมากเกินไป อาจทำให้เกิด overhead ในการจัดการ metadata ของ View

ตัวอย่าง: พิจารณา Query ที่ซับซ้อนที่ใช้ JOIN หลายตารางและคำนวณค่าต่างๆ:

SELECT
    p.product_name,
    SUM(oi.quantity * p.price) AS total_revenue
FROM
    products p
JOIN
    order_items oi ON p.product_id = oi.product_id
JOIN
    orders o ON oi.order_id = o.order_id
WHERE
    o.order_date BETWEEN '2023-01-01' AND '2023-12-31'
GROUP BY
    p.product_name
ORDER BY
    total_revenue DESC
LIMIT 10;

ถ้าเราต้องใช้ Query นี้บ่อยๆ, การสร้าง View จะช่วยลดความซับซ้อนได้มาก:

CREATE VIEW top_10_products_revenue AS
SELECT
    p.product_name,
    SUM(oi.quantity * p.price) AS total_revenue
FROM
    products p
JOIN
    order_items oi ON p.product_id = oi.product_id
JOIN
    orders o ON oi.order_id = o.order_id
WHERE
    o.order_date BETWEEN '2023-01-01' AND '2023-12-31'
GROUP BY
    p.product_name
ORDER BY
    total_revenue DESC
LIMIT 10;

จากนั้นเราสามารถเรียกใช้ View ได้ง่ายๆ:

SELECT * FROM top_10_products_revenue;

Security

View สามารถใช้เพื่อปรับปรุงความปลอดภัยของฐานข้อมูลได้ โดยการจำกัดการเข้าถึงข้อมูลที่ผู้ใช้สามารถมองเห็นได้ เราสามารถสร้าง View ที่แสดงเฉพาะข้อมูลที่ผู้ใช้จำเป็นต้องใช้ และซ่อนข้อมูลที่ไม่เกี่ยวข้องหรือไม่ควรเข้าถึง

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

  • Data Masking: View สามารถใช้เพื่อ Mask ข้อมูลที่ละเอียดอ่อน เช่น หมายเลขบัตรเครดิต หรือที่อยู่ โดยการแสดงเฉพาะส่วนที่จำเป็นเท่านั้น
  • Row-Level Security: View สามารถใช้เพื่อกรองข้อมูลที่ผู้ใช้สามารถมองเห็นได้ โดยขึ้นอยู่กับบทบาทหรือสิทธิ์ของผู้ใช้
  • Complexity: การใช้ View เพื่อความปลอดภัยอาจเพิ่มความซับซ้อนให้กับระบบ
  • Performance: View ที่ใช้เพื่อความปลอดภัยอาจทำให้ Query ช้าลง เนื่องจากต้องมีการกรองข้อมูลเพิ่มเติม

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

CREATE VIEW employee_info AS
SELECT
    employee_id,
    employee_name,
    department,
    email
FROM
    employees;

จากนั้นเราสามารถให้สิทธิ์การเข้าถึง View นี้แก่พนักงานทั่วไป โดยไม่ให้สิทธิ์การเข้าถึงตาราง employees โดยตรง

แนวปฏิบัติที่ดี

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

ในบทต่อไป เราจะเรียนรู้วิธีการสร้าง View ใน MySQL โดยใช้คำสั่ง CREATE VIEW

Office.in.th Custom Service

ต้องการพัฒนาระบบหรือปรับแต่งจากโครงสร้างนี้?

Office.in.th รับพัฒนาและออกแบบ Enterprise Web Application, API Integration และระบบบริหารงานภาครัฐ/เอกชน พร้อมการสนับสนุนระยะยาว

ดูบริการรับพัฒนาซอฟต์แวร์