TIL - 2021.10.24

Wanna be __·2021년 10월 24일
0

TIL

목록 보기
43/45
post-thumbnail

Today, I Learned

1. DB

  • View
    - (Normal) View VS Materialized View
    그냥 View는 logical 한 table이라, 그냥 뷰 생성할 때 줬던 쿼리만 가지고 있는거임.
    근데, 반복적으로 실행하는 aggregate 를 자주 사용하는, 혹은 join하는데 시간이 많이 들어가는 경우에는 결과값을 미리 물리적인 table에 만들어 둘 수 도 있는데, 그게 Materialized View임
  • View에서 Update등을 지원해야 하나?
    - 추가 한다고 해도, 정작 view에서는 조회 못하는 문제 등

    create view instructor_info as
    select ID, name, building
    from instructor, department
    where instructor.dept_name = department.dept_name;

    이렇게 만든 view 를 통해서 값을 집어넣게 되면, dept_name 파트는 null 값으로 비어있을 거기 때문에, 정작 추가한 view에서 조회를 못하는 상황이 생길 수 있음.
    그럼 updatable 한 view는 어떤 특징을 가지냐?
    1. view 만들때 from 절에 하나의 table 만 가짐
    2. select 절에 expression, aggregate, distinct 없음
    3. select 절에 포함되지 않은 attributes들은 null 값이 되어야 함.
    4. group by 나 having 가지고 있으면 안됨.
    이거 다 만족하더라도

    create view history_instructor as
    select *
    from instructor
    where dept_name = 'History';

    이렇게 만든 view에 ('23423', 'Brown', 'Biology', 1000000) 값 넣게 되면, 들어는 갈 지라도 view에 안나옴. -> with check option 을 써서 update 후에 view 조건에 안걸리는 update 는 reject 하도록 설정할 수 도 있다.

  • Transactions
    두가지의 sql 을 실행할 때, 둘 다 성공하거나 둘 다 실패하도록 맞추는 것 = atomicity.
    기본적으로 SQL implementation은 각 sql statement가 하나의 transaction을 이루도록 하는데, begin atomic ... end 안에 하나의 transaction에 처리하고자 하는 query들을 넣음으로써 여러 query의 atomicity를 보장 할 수 있다.

  • Integrity
    Data의 consistency의 loss 를 방지 = 일관된 양식의 data가 저장되도록, structured data로 조건을 주는 것.
    table을 create 할 때 조건을 주고, 이후에

    alter table TABLE add CONSTRANIT

    통해서 추가할 수 도 있음.

    근데 추가할 조건을 만족하지 않는 data가 이미 들어가 있으면? - 확인 해봐야함
    !!!! MYSQL 5.7에서는 CHECK 지원 X !!!

  1. NOT NULL
  2. UNIQUE
    superkey를 이룬다. (KEY 관련 정리 참고)
  3. CHECK
profile
성장하는 개발자

0개의 댓글