Quản lý view

Thiết kế cơ sở dữ liệu

Lis Sulmont

Curriculum Manager

Tạo view phức tạp hơn

  • Tổng hợp: SUM(), AVG(), COUNT(), MIN(), MAX(), GROUP BY, ...
  • Join: INNER JOIN, LEFT JOIN. RIGHT JOIN, FULL JOIN
  • Điều kiện: WHERE, HAVING, UNIQUE, NOT NULL, AND, OR,>,<, ...
Thiết kế cơ sở dữ liệu

Cấp và thu hồi quyền truy cập view

GRANT privilege(s) hoặc REVOKE privilege(s)

ON object

TO role hoặc FROM role

  • Quyền: SELECT, INSERT, UPDATE, DELETE, ...
  • Đối tượng: table, view, schema, ...
  • Vai trò: người dùng DB hoặc nhóm người dùng DB
Thiết kế cơ sở dữ liệu

Ví dụ cấp/thu hồi quyền

$$

GRANT UPDATE ON ratings TO PUBLIC;  

$$

REVOKE INSERT ON films FROM db_user;
Thiết kế cơ sở dữ liệu

UPDATE view

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

Không phải mọi view đều cho phép UPDATE

  • View gồm một bảng
  • Không dùng hàm cửa sổ hoặc tổng hợp
1 https://www.postgresql.org/docs/9.5/sql-update.html
Thiết kế cơ sở dữ liệu

INSERT vào view

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

Không phải mọi view đều cho phép INSERT

1 https://www.postgresql.org/docs/9.5/sql-insert.html
Thiết kế cơ sở dữ liệu

INSERT vào view

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

Không phải mọi view đều cho phép INSERT

Kết luận: tránh sửa dữ liệu qua view

1 https://www.postgresql.org/docs/9.5/sql-insert.html
Thiết kế cơ sở dữ liệu

Xóa view

DROP VIEW view_name [ CASCADE | RESTRICT ];
  • RESTRICT (mặc định): báo lỗi nếu có đối tượng phụ thuộc vào view
  • CASCADE: xóa view và mọi đối tượng phụ thuộc
Thiết kế cơ sở dữ liệu

Định nghĩa lại view

CREATE OR REPLACE VIEW view_name AS new_query
  • Nếu đã có view view_name, nó sẽ được thay thế
  • new_query phải tạo cùng tên cột, thứ tự và kiểu dữ liệu như truy vấn cũ
  • Có thể thay đổi dữ liệu đầu ra của cột
  • Có thể thêm cột mới ở cuối

Nếu không đáp ứng, hãy DROP view hiện tại và tạo view mới

1 https://www.postgresql.org/docs/9.2/sql-createview.html
Thiết kế cơ sở dữ liệu

ALTER 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
Thiết kế cơ sở dữ liệu

Ayo berlatih!

Thiết kế cơ sở dữ liệu

Preparing Video For Download...