การจัดการ View

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

Lis Sulmont

Curriculum Manager

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

  • การรวมข้อมูล: SUM(), AVG(), COUNT(), MIN(), MAX(), GROUP BY, ฯลฯ
  • การ Join: INNER JOIN, LEFT JOIN. RIGHT JOIN, FULL JOIN
  • เงื่อนไข: WHERE, HAVING, UNIQUE, NOT NULL, AND, OR,>,<, ฯลฯ
การออกแบบฐานข้อมูล

การให้และเพิกถอนสิทธิ์การเข้าถึง View

GRANT privilege(s) หรือ REVOKE privilege(s)

ON object

TO role หรือ FROM role

  • Privileges: SELECT, INSERT, UPDATE, DELETE, ฯลฯ
  • Objects: ตาราง, view, schema, ฯลฯ
  • Roles: ผู้ใช้ฐานข้อมูลหรือกลุ่มผู้ใช้ฐานข้อมูล
การออกแบบฐานข้อมูล

ตัวอย่างการให้และเพิกถอนสิทธิ์

$$

GRANT UPDATE ON ratings TO PUBLIC;  

$$

REVOKE INSERT ON films FROM db_user;
การออกแบบฐานข้อมูล

การอัปเดต View

UPDATE films SET kind = 'Dramatic' WHERE kind = 'Drama';

ไม่ใช่ทุก View ที่อัปเดตได้

  • View ประกอบจากตารางเดียว
  • ไม่ใช้ window function หรือ aggregate function
1 https://www.postgresql.org/docs/9.5/sql-update.html
การออกแบบฐานข้อมูล

การแทรกข้อมูลเข้า View

INSERT INTO films (code, title, did, date_prod, kind)
    VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama');

ไม่ใช่ทุก View ที่แทรกข้อมูลได้

1 https://www.postgresql.org/docs/9.5/sql-insert.html
การออกแบบฐานข้อมูล

การแทรกข้อมูลเข้า View

INSERT INTO films (code, title, did, date_prod, kind)
    VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama');

ไม่ใช่ทุก View ที่แทรกข้อมูลได้

ข้อควรจำ: หลีกเลี่ยงการแก้ไขข้อมูลผ่าน View

1 https://www.postgresql.org/docs/9.5/sql-insert.html
การออกแบบฐานข้อมูล

การลบ View

DROP VIEW view_name [ CASCADE | RESTRICT ];
  • RESTRICT (ค่าเริ่มต้น): คืนค่าข้อผิดพลาดหากมี object ที่ขึ้นอยู่กับ View นั้น
  • CASCADE: ลบ View และ object ทั้งหมดที่ขึ้นอยู่กับ View นั้น
การออกแบบฐานข้อมูล

การกำหนด View ใหม่

CREATE OR REPLACE VIEW view_name AS new_query
  • หากมี View ที่ชื่อ view_name อยู่แล้ว จะถูกแทนที่
  • new_query ต้องสร้างชื่อคอลัมน์ ลำดับ และชนิดข้อมูลเหมือนกับ query เดิม
  • ค่าของคอลัมน์อาจแตกต่างกันได้
  • สามารถเพิ่มคอลัมน์ใหม่ต่อท้ายได้

หากเงื่อนไขเหล่านี้ไม่สามารถทำได้ ให้ลบ View เดิมและสร้างใหม่

1 https://www.postgresql.org/docs/9.2/sql-createview.html
การออกแบบฐานข้อมูล

การแก้ไข View

ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name SET DEFAULT expression
ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name DROP DEFAULT
ALTER VIEW [ IF EXISTS ] name OWNER TO new_owner
ALTER VIEW [ IF EXISTS ] name RENAME TO new_name
ALTER VIEW [ IF EXISTS ] name SET SCHEMA new_schema
ALTER VIEW [ IF EXISTS ] name SET ( view_option_name [= view_option_value] [, ... ] )
ALTER VIEW [ IF EXISTS ] name RESET ( view_option_name [, ... ] )
1 https://www.postgresql.org/docs/9.2/sql-alterview.html
การออกแบบฐานข้อมูล

มาฝึกกันเถอะ!

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

Preparing Video For Download...