초급 (8)SYNONYM&오류가능성, 계정 개념, 정규화, 반정규화
---
https://youtube.com/playlist?list=PLyQR2NzLKOCb-i7xCOQVU_yomhvHRteDy
이거 보는 중
---
(20/28)
*SYNONYM : 동의어
그 전에 계정이라는 것에 대한 개념을 좀 알아야 한다
DB가 집이면 TABLE은 방
그럼 계정은?
DB라는 집이 있을 때 집을 드나드는 사람들이 있다. 사람들이 계정
아빠와 아들이 집에 드나들 때는
아빠 계정
아들 계정
있다고 생각한다. 집에 드나들 때는 하나의 비밀번호를 공유해서 그걸 누르고 들어오지만
데이터 베이스 같은 경우에는 각 계정에 따라서 각자 고유의 비밀번호가 부여가 된다.
아빠가 집에 들어가면 컴퓨터 방을 하나 만들었어. 컴퓨터 방의 소유자는 아빠
아들이 이 컴퓨터 방을 쓰고 싶으면?그냥 쓸 수는 없고 아빠의 허락을 받아야 해.
아빠가 아들에게 GRANT로 권한을 부여하게 된다
아들이 그럼 이제 컴퓨터 방을 사용할 수 있게 되는데 좀 더 편의성을 높여주기 위해 여기서 SYNONYM이라는 개념이 등장한다
실습보고 이해하자. MINA라는 계정의 IDOL_GROUP테이블을 TAMI라는 계정이 사용할 수 있도록 설정
처음에는
없다고 나옴. 권한이 부여되지 않아서
그럼 MINA로 가서
그럼 이제 타미로 가서 셀렉트를 SELECT * FROM MINA.IDOL_GROUP; 이렇게 하면 잘 되는데,
여기서 SYNONYM을 생성해주게 되면
에서 MINA.이라는 계정명을 생략하고도 IDOL_GROUP테이블을 SELECT할 수 있게 됩니다
그 전에 SYS계정으로 가서 SYNONYM을 생성할 수 있는 권한을 줘야해
GRANT CREATE SYNONYM TO TAMI; -> SYNONYM은 SYNONYM을 사용할 계정에서 생성을 해주는 것
CREATE SYNONYM IDOL_GROUP FOR MINA.IDOL_GROUP;
-> 이게 SYNONYM을 테이블과 동일하게 이름을 만든것일뿐
MINA.IDOL_GROUP라는 테이블을 사용하기 위해 IDOL_GROUP이라는 동의어를 쓸거야
SYNONYM을 테이블과 동일하게 안해도 되지만 소스내에서 SELECT쿼리를 사용할텐데 편의성을 위해서 작성하는 SYNONYM이기 때문에 동일하게 한다.
DB계정을 하나로만 써도 되지만 보안상 생길 수 있는 문제를 없애기 위해. 권한을 주지 않는다면 서로의 영역을 침범하지 않으니까 보안상 조금 더 안전한 운영이 가능
DBA권한, 개발자들의 권한으로 나눠서 테이블 생성, INDEX생성하는건 DBA, 개발자들은 CRUD만 부여한다든지
그럼 사용자들이 테이블을 DROP시키는 장애는 예방할 수 있다
무조건 SYNONYM을 많이 쓰면 좋지 않은게 지속적으로 관리를 해야 하는 포인트가 하나 늘어나니까
->아빠가 컴퓨터 방 쓰다가 방 없애면 시노님을 만들어서 사용하던 아들은 방이 없어지면 에러가 나
->시노님을 만들어놨는데, 신입사원이 시노님과 동일한 이름의 테이블을 생성해버릴 수도 있다 -> 오작동
---
(21/28)
제1 정규형 (1NF) 원자성 : 모든 속성은 반드시 하나의 값만 가져야 한다
▽쉼표로 하지 말란건 알았는데 반복 그룹?? 저 컬럼 중복을 여러개의 레코드로 나눠야 된다는 건가? https://velog.io/@choi-yh/데이터베이스-정규화 맞는듯
▽https://m.blog.naver.com/pjt3591oo/220855983847 : 왜 제1정규화를 해야하는지
▽저 표시도 익혀놔야지
제2정규형 (2NF) 부분 종속 : 모든 속성은 반드시 모든 기본키에 종속돼야 한다.(기본키 일부에만 종속돼서는 안됨)
▽음료 테이블을 따로 빼야 겠네 -> 이게 종속적이지 않아서 생기는 문제구나
제3정규형 (3NF) 이행 종속 : 기본 키가 아닌 모든 속성간에는 서로 종속될 수 없다.
▽왜 내 동네에 와서 동네를 또 차리고 있어 이런 느낌이네
요약 : 한마디로 정규화란 데잍가 꼬이는 것을 막기 위해 테이블을 잘게 나누는 것
---
(22/28)
1.테이블 반정규화 - 테이블 병합/분할/추가
2.컬럼 반정규화 : 중복/파생/이력테이블 컬럼 추가
▽배송 테이블에 회원번호라는 컬럼을 추가했다 이것? 비용은 UPDATE할 때도 두 테이블에 해줘야 하니까?
▽그냥 쓸만한 컬럼 하나 추가한다 이런것 같은데
3.관계 반 정규화 : 중복관계 추가
배송에서 주문번호 ->회원번호 를 거쳐야 했는데 그냥 회원번호를 넣어버리는
요약 : 반정규화는 성능 향상을 위해 정규화를 포기하는 것! BUT 데이터 무결성이 보장 되지 않으므로 제한적으로 사용해야 한다.