ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [DB] Mysql View
    데이터베이스 2020. 12. 6. 21:05
    728x90

    View

    다른 DB user 에게 정보를 제한적으로 제공하고자 할 때 사용하는 기능으로 보안을 위함

    예를 들어 Professor 테이블을 공개하되 Salary(연봉) 정보는 제외한 column 들만 공개하고싶다. 하는 요구사항이 있을 때 사용

    View 는 Virtual Relation 이라고 불리기도 함

     

    CREATE VIEW faculty AS
    SELECT pID, name, deptName FROM Professor;
    SELECT name FROM faculty WHERE deptName = ‘CS’;

     

    View 는 항상 최신의 데이터를 갖고 있음 → 실제 Table 을 다른 창구로 바라보는 것일 뿐이기 때문

    View 를 이용하여 또 다른 View 를 정의할 수도 있음

    View Expansion : View 에 대해서 Select 쿼리가 이루어질 때 View 에 대한 정의(Definition query) 로 치환되어 처리되는 것을 말함

     

    SELECT * FROM faculty;

    위 구문은 View expansion 에 의해 아래 구문으로 치환됨

    SELECT * FROM (SELECT pID, name, deptName FROM Professor);

    View modification

    INSERT INTO faculty VALUES (‘30765’, ‘Yang’, ‘CS’);

    위 insert 문은 아래 Insert 문으로 처리됨

    INSERT INTO Professor VALUES (‘30765’, ‘Yang’, ‘CS’, null);

     

    View 는 특정 제약 하에서는 base relation 에 수정을 허용

    view 에 없는 컬럼이 null 을 허용해야함

     

    단일 Base relation 을 가져야함 = View 가 단일 테이블에 연관되어 있어야함

    CREATE VIEW professorInfo as
    SELECT pID, name, building FROM professor, department
    WHERE professor.deptName = department.deptName
    INSERT INTO professorInfo VALUES (‘666’, ‘White’, ‘Taylor’);

    의 경우 deptName 을 결정할 수 없기 때문

     

     

    집계함수 혹은 distinct, group by가 있으면 안됨

    CREATE VIEW departmentTotalSalary(deptName, totalSalary) AS
    SELECT deptName, SUM(salary) FROM professor
    GROUP BY deptName;
    INSERT INTO departmentTotalSalary VALUES (‘CS’, 100,000);


    이런 경우 base relation 인 professor 테이블을 어떻게 변경할 지 결정할 수 없음

     

    With check option

    CREATE VIEW CSProfessors AS
    SELECT * FROM professor WHERE deptName = ‘CS’;
    INSERT INTO CSProfessors VALUES (‘255’, ‘Brown’, ‘Math’, 1000);

    CSProfessors 는 ‘CS’ 학과 교수에 관련된 View 인데 수학과 교수를 추가하는 논리적인 오류를 범하고 있음

    이를 막기 위한 옵션으로 CREATE View 구문 맨 끝에 WITH CHECK OPTION 을 붙여주면 이를 막음

    View 한계

    • View 에 대해서는 index 를 만들어주지 않음

    • View 에는 key, constraint 를 생성할 수 없음

     

    '데이터베이스' 카테고리의 다른 글

    [DB] Mysql 트리거  (0) 2020.12.08
    [DB] On Delete, On Update, Check, Assertion  (0) 2020.12.06
    [DB] Mysql C/C++ 함수 연동  (0) 2020.12.06
    [DB] Mysql 프로시져  (0) 2020.12.06
    [DB] Mysql 함수 정의 및 사용  (3) 2020.12.06

    댓글

Designed by Tistory.