DB 17

서브쿼리

서브쿼리란 ?? SQL 내부에서 작성되는 일시적인 테이블이다 -> 이를 영속화한 것이 뷰 ! 사실 테이블과 서브쿼리는 기능적인 관점에서는 전혀 차이가 없다. 사용자는 자신이 다루는 대상 테이블이 테이블인지 뷰인지 서브쿼리인지 따로 구분하지 않고 사용할 수 있다. 하지만 각각의 차이를 정리해보면 다음과 같다. 테이블 : 영속적인 데이터 저장 뷰 : 영속적이지만 데이터는 저장하지 않음, 따라서 접근할 때마다 SELECT 구문이 실행됨 서브쿼리 : 비영속적인 생존 기간(스코프)이 SQL 구문 실행 중으로 한정 기능적인 유연성 때문에 서브쿼리는 SQL 코딩에서 빈번하게 사용이 되지만 테이블에 비해 성능이 나쁜 경향이 있다. 밑에서는 서브쿼리를 사용할 때 신경써야 할 점 과 문제 패턴을 분석해볼 것이다. 1. 문..

DB/관계형 DB 2021.03.12

조인(결합) 알고리즘과 성능

옵티마이저가 선택 가능한 결합 알고리즘 1. Nested Loops 2. Hash 3. Sort Merge 가장 빈번한 알고리즘은 Nested Loops -> Hash -> Sort Merge 이다. 대부분이 이 세개를 지원하지만 그렇지 않거나 파생된 알고리즘을 제공하는 곳이 있으니 자신이 주로 사용하는 DBMS 최신 동향에 주의를 기울이도록하자. 1. Nested Loops 중첩 반복을 사용하는 알고리즘 -> 결합은 한 번에 두 개의 테이블만 결합하므로 본질적으로 이중 반복과 같은 의미 . 테이블 R을 구동 테이블 = 외부 테이블이라고 부르고 B를 내부 테이블이라고 부른다. 1. 결합 대상 테이블 R에서 레코드를 하나씩 반복해가며 스캔 2. 구동 테이블의 레코드 하나마다 내부 테이블의 레코드를 하나씩 ..

DB/관계형 DB 2021.02.19

JOIN(결합) 종류

결합의 종류 기능적인 관점 -> 중점적으로 다룰 것 -크로스 -내부 -외부 그 외 -자기 -등가/비등가 : 등호(=)를 썼는가 안썼는가 -자연 : NATURAL JOIN 암묵적으로 같은 이름의 필드가 등호로 결합됨. (가독성, 확장성 떨어짐) 이중 크로스, 내부, 외부는 결과의 형태에 따라 구분되어 각각 배타적인 분류이다. 1. 크로스 결합 실무에서 사용할 기회는 거의 없다. - 작동 Employees 테이블 사원 ID 사원 이름 부서 ID 1 하린 10 2 한미루 11 3 사라 11 4 중민 12 5 웅식 12 6 쿠와와 12 Department 테이블 부서 ID 부서 이름 10 총무 11 인사 12 개발 13 영업 코드. 1 SELECT * FROM Employees CROSS JOIN Departm..

DB/관계형 DB 2021.02.18

인덱스 정리 (종류, 고려해야 할 부분, 사용할 수 없는 경우, 대처)

RDB에서 사용하는 인데스는 구조에 따라 세 가지로 분류할 수 있다. - B-tree 인덱스 - 비트맵 인덱스 : 비트 플래그로 변환해서 저장하는 형태, 카디널리티가 낮은 필드에 대해 효과적 - 해시 인덱스 : 키를 해시 분산해서 등가 검색을 고속으로 실행하고자 만들어진 인덱스 (거의 사용 X) 만능형 : B-tree - 데이터를 트리 구조로 저장하는 형태의 인덱스이다. - 균형잡힌 뛰어난 범용성의 인덱스로 가장 많이 사용된다. - 특별히 앞에 이름을 붙이지 않으면 B-tree 인덱스를 지칭하는 것 = default 사실은 대부분의 데이터베이스는 리프 노드에만 키값을 저장하는 B+tree, B-tree의 수정 버전을 사용한다. (오라클, PostgreSQL, MySQL 등), 이는 보다 검생을 효율적으로..

DB/관계형 DB 2021.02.12

Select

Select = 데이터를 얻을 수 있는 유일한 수단 기본 구조 SELECT 칼럼의 목록 FROM 테이블의 목록 WHERE 검색 조건 칼럼의 목록 = Projection 데이블의 목록 = Product 검색 조건 = Restrict -> 평가 순서가 있음 (유의하자) 평가 순서 != 실행 순서 1. 테이블의 목록 2. 검색 조건 3. 컬럼의 목록 집계함수 함수의 유무만으로 의미가 봐뀜 구문이 완전히 같아도 SELECT의 칼럼의 목록 (select list) 중에 집계함수가 포함돼 있으면 select의 결과 전체가 집계결과가 된다. 집계 함수 없음 SELECT CONCAT(name, ':', department) FROM studunts WHERE department = '관계형 모델' -> 학생의 수만 포..

DB/관계형 DB 2021.01.22

도메인 설계 전략

DB 설계에서 가장 어려운 것이 도메인 설계이다. 응용프로그램에서 어떤 릴레이션이 필요하고 각 릴레이션은 어떤 속성을 가져야 하며 각 속성의 데이터형은 무엇인가와 같은 것들은 사람이 생각해서 판단하지 않으면 안 되는 분야이다. 이 장에서는 2가지를 살펴볼 것이다. 이름 도메인 : 데이터 형 1. 도메인이란?? 관계형 모델에서 데이터형에 불과하다. 즉 도메인은 속성이 취할 수 있는 값의 집합이다. 관계형 모델에서 컴퓨터가 ㅜ치급하는 데이터는 유한하게 한정되므로 도메인도 필연적으로 유한집합이 된다. 도메인의 요소에 어떤 구조를 가진 데이터를 할당할 것인지는 관계형 모델상의 제한은 없다. 컴퓨터가 표현할 수 있는 것이면 상관없다. 집합의 요소 구조는 상관없지만 집합의 요소로 정의할 필요가 있으므로 명확한 값을..

DB/관계형 DB 2021.01.19

릴레이션 직교성

직교성은 여러 개의 릴레이션 사이의 중복에 관한 개념이다. 즉 DB 전체에서 중복을 제거하는 작업이다. 각 릴레이션에서 중복을 제거해도 DB 전체를 볼 때 중복이 남아 있다면 결국 불일치의 원인이 된다. 직교란 두 개 이상의 릴레이션이 같은 값을 갖지 않는 상태이다. 1. 같은 값을 가진 릴레이션 레플리카 완전히 같은 구조와 같은 데이터를 가진 릴레이션이 여러 개 있는 경우. 즉 DB를 복제하여 사용하는 경우 같은 형태의 릴레이션 예를 들어보면 특정 데이터를 2000년~ 2020년의 데이터를 1년마다 다른 릴레이션에 저장하는 경우, 제목이 완전히 같은 릴레이션은 분명 의미도 같은 것이라고 생각하기 때문에 같은 값을 가질 수 있다. 이때 같은 값을 가지고 있다면 중복되므로 모순이 발생한다. 제목 일부만 같..

DB/관계형 DB 2021.01.18

정규화 논리 (결합 종속성) #(제 4정규형 ~ 제 6정규형)

1. 결합 종속성 함수 종속성을 사용한 정규화는 후보키가 되는 속성을 찾아내는 작업이다. 그리고 이런 숨겨진 후보키가 발견됐을 때에는 릴레이션을 무손실 분해해 릴레이션 내부의 중복을 제거할 수 있었다. 하지만 아직 중복성 제거의 싸움은 끝나지 않았다. 이를 위해 나온 것이 결합 종속성이다. (JD) 결합 종속성은 키 자체에 다중성이 포함됐을 때 나타나는 중복을 나타낸다. [정의] A, B, ..., C를 릴레이션 R의 제목의 부분집합이라고 하자. 만약 A, B, ... , C의 프로젝션에 대응하는 릴레이션을 결합한 결과와 R이 같은 경우라면 이 경우에 한해 R은 다음의 결합 종속성을 만족시키게 된다. ☆{A, B, ..., C} A, B, ..., C의 제목 중 하나가 R의 제목 전체와 같을 때는 그 결..

DB/관계형 DB 2021.01.11

정규화 논리 (함수 종속성) #(제 1정규형 ~ 제 3+정규형)

1. DB 설계가 중요한 이유 객체지향 프로그래밍에서 적절한 객체가 설계돼 있지 않다면 그에 대한 조작인 멤버함수나 메서드는 복잡해질 것이며 응용프로그램의 로직도 잘 표현할 수 없을 것이다. RDB도 똑같다. 데이터의 조작인 쿼리는 DB에 포함된 각 테이블이 적절히 설계돼 있지 않으면 깔끔하게 표현할 수 없다. 그래서 필요한 것이 정규화 이론이다 2. 정규화 ( 관계형 모델을 보완하는 이론 ) 사용이유 1. 변칙을 방지할 수 있다. ( 논리적 모순이 발생하여 답이 나올 수 없는 구조 ) - 릴레이션의 설계가 상식적이지 않을 때 발생 - 중복때문에 발생 정규형 (NF) 정규화에는 몇 가지 단계가 있는데 높은 단계로 갈수록 더 좋은 상태가 된다. ( 중복이 적은 상태 ) 함수 종속성( FD ) 정의 : 어떤..

DB/관계형 DB 2021.01.10

MongoDB CRUD 작업하기

CREATE 몽고디비는 컬럼을 정의하지 않아도 됨 자유로움이 장점, 무엇이 들어올지 모른다는 단점 자바스크립트의 자료형을 따름(차이점도 존재) ObjectId: 몽고디비의 자료형으로 고유 아이디 역할을 함 save method로 저장 컬렉션 간 관계를 강요하는 제한이 없으므로 직접 ObjectId를 넣어 연결 사용자의 ObjectId를 찾은 뒤 댓글 컬렉션에 넣음 Read find로 모두 조회, findOne으로 하나만 조회 첫 번째 인수로 조회 조건 입력 가능 - $gt나 $or같은 조건 연산자 사용 두 번째 인수로 조회할 필드를 선택할 수 있음(1은 추가, 0은 제외) 정렬은 sort 메서드로 함 limit 메서드로 조회할 다큐먼트 개수 제한 skip 메서드로 건너뛸 다큐먼트 개수 제공 Update ..

DB/NoSQL 2021.01.01