Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: [DB] View 정리 #7

Merged
merged 1 commit into from
Jan 4, 2025
Merged

feat: [DB] View 정리 #7

merged 1 commit into from
Jan 4, 2025

Conversation

chaeyeon0130
Copy link
Contributor

개요

  • DB View에 대해 공부했습니다.
  • View의 특징, 사용 방법, 장단점에 대해 알아보았습니다.

체크리스트

  • PR 제목을 Commit Convention에 맞게 작성
  • Label 추가

@chaeyeon0130 chaeyeon0130 self-assigned this Dec 29, 2024
Copy link
Contributor

@HwanGonJang HwanGonJang left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

뷰를 공부만 했지 실제로 사용해본 경험은 없는데, 실제로는 어떻게 사용되나요? 스프링 부트 같은 프레임워크에 기능이 존재하는지 궁금해요!


<br>

뷰를 읽기 전용으로 만들고 싶은 경우 쿼리 마지막에 `with read only`를 추가하면 된다.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

뷰도 read only가 있군요! 혹시 모든 데이터베이스에서 제공하는 기능일까요?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아뇨! 지원하지 않는 DBMS도 있습니다!

@sna0e sna0e self-requested a review December 30, 2024 12:04
Copy link
Member

@HI-JIN2 HI-JIN2 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

너무 아름 다운다운다운다운 View....
데베 수업 들을때 과제에서 썼던 기억이 새록새록 나네요..! 잘 읽었습니다 🫶


- 뷰에 인덱스를 구성할 수 없다.
- 뷰를 포함하여 뷰를 만든 경우 연관 뷰를 삭제하면 생성된 뷰도 삭제된다.
- 한번 정의된 뷰는 수정이 불가하다.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수정이 불가하다는게 조회만 가능하다는걸까요? (데이터의 추가수정삭제가 불가한지?)
아니면 컬럼이 고정되어서 뷰의 구성 요소 변경이 어렵다는걸가요!?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

뷰의 구성 요소 변경이 안 된다는 뜻입니다!
해당 방법은 따로 없고 create or replace view로 덮어써서 수정할 수는 있습니다.

그리고 view 자체에서 DML(추가,수정,삭제)을 사용할 수는 있습니다! 다만, 여러 제약사항들이 있다고 하네요(집계함수나 DISTINCT가 있으면 변경이 안된다 등.. 과 같은)

@chaeyeon0130
Copy link
Contributor Author

뷰를 공부만 했지 실제로 사용해본 경험은 없는데, 실제로는 어떻게 사용되나요? 스프링 부트 같은 프레임워크에 기능이 존재하는지 궁금해요!

오! 저도 이번 기회에 찾아보게 되었는데요

  1. DB에서 View를 생성하고
  2. 스프링에서 해당 View와 연결할 Entity를 생성하여 @Immutable 어노테이션을 적용한다. (@Immutable은 Hibernate에게 해당 Entity 객체가 수정되지 않음을 알리는 역할을 한다고 하네요)
  3. 이후, 쿼리는 spring data jpa 방식으로 작성한다.
  • DB에 View가 없다면, @Subselect("SELECT ~ FROM ~ JOIN ~ ON ~")을 사용하여 직접 JPQL 쿼리를 작성해서 생성하면 된다.

일반적인 테이블과 같이 @Entity를 사용하는데, View Table이라는 것을 명시적으로 나타내기 위해 @Immutalbe 어노테이션을 추가로 사용하면 되는 것 같아요!


뷰의 단점

- 뷰에 인덱스를 구성할 수 없다.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

왜 인덱스를 구성할 수 없을까요?!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

뷰는 물리적인 테이블이 아니라 select 쿼리 결과를 의미하는 가상 테이블이기 때문이에요. 논리적으로만 존재하기 때문에 인덱스를 걸 수 없습니다!

@chaeyeon0130 chaeyeon0130 merged commit 7d14bc2 into main Jan 4, 2025
@chaeyeon0130 chaeyeon0130 deleted the chaeyeon/DB branch January 5, 2025 02:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants