테이블 및 인덱스 등의 통계 정보를 활용하여 SQL문을 실행하는데 소요될 처리시간 및 CPU, I/0 자원량 등을 계산하여 가장 효율적일 것으로 예상되는 실행계획을 선택하는 옵티마이저를 CBO(cost based optimizer)라 한다

 

실행계획을 통해 알 수 있는 정보

; 액세스 기법, 질의 처리 예상 비용(cost), 조인 순서

 

실행계획의 실행순서

; 위에서 아래로, 안에서 밖으로

 

실행계획은 SQL 처리를 위한 실행 절차와 방법을 표현한 것

실행계획은 조인 방법, 조인 순서, 액세스 기법 등이 표현된다

실행계획 즉, 실행 방법이 달라진다고 해서 결과가 달라지지는 않는다

CBO의 실행 계획에는 단계별 예상 비용 및 건수 등이 표시된다

 

SQL 처리 흐름도는 SQL문의 처리 절차를 시각적으로 표현한 것으로, 인덱스 스캔 및 전체 테이블 스캔 등의 액세스 기법을 표현할 수 있으며, 성능적인 측면도 표현할 수 있음

 

관계형 데이터베이스의 인덱스 INDEX

- 기본 인덱스에 널 값들이 나타날 수 없다

- 테이블의 전체 데이터를 읽는 경우는 인덱스가 거의 불필요하다

- 인덱스는 오직 조회만을 위한 오브젝트

- B트리는 관계형 데이터베이스의 주요 인덱스 구조이다

- 대량의 데이터를 삽입할 때는 모든 인덱스를 제거하고, 데이터 삽입이 끝난 후에 인덱스를 다시 생성하는 것이 좋다

 

인덱스 종류

- B-TREE 인덱스 : 브랜치 블록과 리프 블록으로 구성되며, 브랜치 블록은 분기를 목적으로 하고 리프블록은 인덱스를 구성하는 컬럼의 값으로 정렬된다, 일반적으로 OLTP 시스템 환경에서 가장 많이 사용됨, 일치 및 범위 검색에 적절한 구조

- CLUSTERED 인덱스 : 인덱스의 리프 페이지가 곧 데이터 페이지며, 리프 페이지의 모든 데이터는 인덱스 키 컬럼 순으로 물리적으로 정렬되어 저장됨, ORACLE의 IOT와 매우 유사

- BITMAP 인덱스 : 시스템에서 사용될 질의를 시스템 구현 시에 모두 알 수 없는 경우인 DW 및 AD-HOC 질의 환경을 위해서 설계되었으며, 하나의 인덱스 키 엔트리가 많은 행에 대한 포인터를 저장하고 있는 구조

 

- 규칙기반 옵티마이저는 적절한 인덱스가 존재하면 항상 인덱스를 사용하려고 한다

- 인덱스 범위 스캔은 결과가 없으면 한 건도 반환하지 않을 수 있다

- 인덱스는 INSERT와 DELETE 작업과는 다르게 UPDATE 작업에는 부하가 없을 수도 있다

- 인덱스를 활용하여 데이터를 조회할 때 인덱스를 구성하는 컬럼들의 순서는 SQL 실행 성능에 중요하다

 

옵티마이저와 실행계획

- ORACLE의 규칙 기반 옵티마이저에서 가장 우선 순위가 높은 규칙은 Single row by rowid 액세스 기법이다

- 비용기반 옵티마이저는 테이블, 인덱스, 컬럼 등 객체의 통계정보를 사용하여 실행계획을 수립하므로 통계정보가 변경되면 SQL의 실행계획이 달라질 수 있다

- ORACLE의 실행계획에 나타나는 기본적인 Join 기법으로는 NL Join, Hash join, Sort Merge Join 등이 있다

 

NL Join(nested loop join)

- 조인 칼럼에 적당한 인덱스가 있어서 자연조인이 효율적일 때 유용

- driving table의 조인 데이터 양이 큰 영향을 주는 조인 방식

- 유니크 인덱스를 활용하여 수행시간이 적게 걸리는 소량 테이블을 온라인 조회하는 경유 유용

- 데이터를 집계하는 업무보다는 OLTP의 목록 처리 업무에 많이 사용

- 주로 랜덤 액세스 방식

 

SMJ(sort merge join)

- 조인 컬럼에 적당한 인덱스가 없어서 nl조인이 비효율적일 때 사용

- driving table의 개념이 중요하지 않은 조인 방식

- 조인조건의 인덱스의 유무에 영향 받지 않는다

- 스캔 방식으로 데이터를 읽는다

 

Hash join

- 조인 컬럼에 적당한 인덱스가 없어서 자연조인이 비효율적일 때

- 자연조인시 드라이빙 집합 쪽으로 액세스량이 많아 random 액세스 부하가 심할 때

- 소트 머지 조인을 하기에는 두 테이블이 너무 커서 소트 부하가 심할 때

- 인덱스를 사용하지 않아 칼럼의 인덱스가 존재하지 않을 때도 사용 가능

- '='로 수행하는 즉, 동등 조인에서만 사용 가능

- 행의 수가 작은 테이블을 선행 테이블로 사용하는 것이 성능에 유리

 

 

 

 

'SQLD > SQL 기본 및 활용' 카테고리의 다른 글

정리_fin2  (0) 2023.03.18
정리_fin1  (0) 2023.03.18
정리 3  (0) 2023.03.15
관리 구문  (0) 2023.03.15
정리 2  (0) 2023.03.14

 

 

순수 관계 연산자 : SELECT, PROJECT, JOIN, DIVIDE

 

USING을 사용할 떄는 ALIAS나 테이블 이름과 같은 접두사가 붙을 수 없음

 

CROSS JOIN : Cartesian Product를 만들기 위한 SQL 문장

 

Join에 있어서 주키와 외래키는 영향을 미치지 않는다

 

집합 연산자 종류 : UNION, UNION ALL, INTERSECT, EXCEPT

 

PRIOR : CONNECT BY 절에 사용되며, 현재 읽은 컬럼을 지정한다

START WITH : 계층 구조 전개의 시작 위치를 지정하는 구문, 즉 루트 데이터를 지정

ORDER SIBLINGS BY : 형제 노드(동일 LEVEL) 사이에서 정렬을 수행

 

루트 노드의 LEVEL 값은 1이다

 

셀프 조인이란 동일 테이블 사이의 조인, 한 테이블 내에서 두 칼럼이 연관 관계가 있을 때 사용

반드시 테이블 별칭 alias를 사용해야 함

 

서브쿼리 사용시 주의사항

- 서브쿼리를 괄호로 감싸서 사용한다

- 서브쿼리는 단일행 또는 복수행 비교 연산자와 함꼐 사용 가능하다

- 서브쿼리에서는 ORDER BY를 사용하지 못한다

 

주로 메인쿼리에 값을 제공하기 위한 목적으로 사용되는 것은 비연관 서브쿼리다

 

FROM 절에서 사용되는 서브쿼리를 인라인 뷰라고 하며, 동적으로 생성된 테이블인 것처럼 사용 가능

데이터베이스에 해당 정보가 저장되지 않는다

 

사용의 장점

- 독립성 : 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 된다

- 편리성 : 복잡한 질의를 뷰로 생성함으로써 관련 질의를 단순하게 작성할 수 있다. 또한 해당 형태의 SQL문을 자주 사용할 때 뷰를 이용하면 편리하게 사용할 수 있다

- 보안성 : 직원의 급여정보와 같이 숨기고 싶은 정보가 존재한다면, 뷰를 생성할 때 해당 칼럼을 빼고 생성함으로써 사용자에게 정보를 감출 수 있다

 

윈도우 함수 처리로 인해 결과 건수는 줄지 않는다

 

LAG 함수를 이용해 파티션별 윈도우에서 이전 몇 번째 행의 값을 가져올 수 있고, LEAD 함수를 통해 이후 몇 번째 행의 값을 가져올 수 있다, SQL Server에서는 지원하지 않는 함수이다

 

DBMS에 생성된 USER와 다양한 권한들 사이에서 중개 역할을 할 수 있도록 ROLE을 제공한다. 이러한 ROLE을 DBMS USER에게 부여하기 위해서는 GRANT 명령을 사용하며, ROLE을 회수하기 위해서는 REVOKE 명령을 사용한다

 

PL/SQL의 특징

- PL/SQL은 Block구조로 되어있어 각 기능별로 모듈화가 가능

- 변수, 상수 등을 선언하여 SQL 문장 간 값을 교환한다

- IF, LOOP 등의 절차형 언어를 사용하여 절차적인 프로그램이 가능하도록 한다

- DBMS 정의 에러나 사용자 정의 에러를 정의하여 사용할 수 있다

- PL/SQL은 Oracle에 내장되어 있으므로 Oracle과 PL/SQL을 지원하는 어떤 서버로도 프로그램을 옮길 수 있다

- PL/SQL은 응용 프로그램의 성능을 향상시킨다

- PL/SQL은 여러 SQL 문장을 Block으로 묶고 한 번에 Block 전부를 서버로 보내기 때문에 통신량을 줄일 수 있다

 

PL/SQL 에서는 동적 SQL 또는 DDL 문장을 실행할 때, EXECUTE IMMEDIATE를 사용하여야 한다

 

DML문이 수행되었을 때, 데이터베이스에서 자동으로 동작하도록 작성된 저장 프로그램은 TRIGGER

- trigger는 데이터베이스에 의해서 자동으로 호출되고 수행된다

- trigger는 특정 테이블에 대해서 INSERT, UPDATE, DELETE 문이 수행되었을 때 호출되도록 정의할 수 있다

- trigger는 데이터베이스에 로그인하는 작업에도 정의할 수 있다

- trigger는 TCL을 이용하여 트랜잭션 제어 할 수 없음

- 데이터 무결성과 일관성을 위해 사용자 정의 함수 사용

 

프로시저와 트리거의 차이점

프로시저 : CREATE Procedure 문법 사용, EXECUTE 명령어로 실행, COMMIT, ROLLBACK 실행 가능

트리거 : CREATE Trigger 문법 사용, 생성 후 자동으로 실행, COMMIT, ROLLBACK 실행 안됨

 

 

 

 

 

 

 

'SQLD > SQL 기본 및 활용' 카테고리의 다른 글

정리_fin3  (0) 2023.03.18
정리_fin1  (0) 2023.03.18
정리 3  (0) 2023.03.15
관리 구문  (0) 2023.03.15
정리 2  (0) 2023.03.14

 

SQL 문장들의 종류

- DDL : data definition language; CREATE, ALTER, DROP, RENAME

- DML : data manipulation language; INSERT, UPDATE, DELETE, SELECT

- DCL : data control language; GRANT, REVOKE

- TCL : transaction control language; COMMIT, ROLLBACK, SAVEPOINT

 

비절차적 데이터 조작어는 사용자가 무슨 데이터를 원하는지만 며엣하고, 절차적 데이터 조작어는 어떻게 데이터를 접근해야 하는지 명세한다

 

PK = UNIQUE & NOT NULL

UNIQUE는 테이블 내에서 중복되는 값이 없지만, NULL 입력이 가능하다

 

테이블 생성시 주의사항

- 가능한 단수형 권고

- 테이블명과 컬럼명은 반드시 문자로 시작해야함

- 한 테이블 내에서는 칼럼명이 중복되게 지정될 수 없음

- 테이블 이름을 지정하고 각 컬럼들은 괄호로 묶어 지정

- 각 컬럼들은 콤마로 구분되고, 테이블 생성문의 끝은 항상 세미콜론으로 끝남

- 칼럼 뒤에 데이터 유형은 반드시 꼭 지정되어야 함

 

테이블의 불필요한 칼럼 삭제

; ALTER TABLE 테이블명 DROP COLUMN 삭제할 컬럼명;

 

테이블명 변경

; RENAME A TO B

 

중복된 데이터가 있는 경우 1건으로 처리해서 출력 : DISTINCT

 

DROP과 TRUNCATE는 auto commit되어 rollback이 불가능하고, DELETE는 rollback 가능

 

트랜잭션의 특성

- 원자성 : 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다

- 일관성 : 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못 되지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다

- 고립성 : 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다

- 지속성 : 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다

 

데이터베이스 트랜잭션에 대한 격리성이 낮은 경우 발생할 수 있는 문제점

- Dirty Read : 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽는 것

- non - repeatable read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리 결과가 다르게 나타나는 현상

- phantom read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫 번째 쿼리에서 없던 유령 레코드가 두 번째 쿼리에서 나타나는 현상

 

트랜잭션 : 데이터베이스의 논리적 연산단위로서 밀접히 관련되어 분리될 수 없는 한 개이 상의 데이터베이스 조작

트랜잭션의 종료를 위한 대표적 명령어로서는 데이터에 대한 변경사항을 데이터베이스에 영구적으로 반영하는 commit과 데이터에 대한 변경사항을 모두 폐기하고 변경 전의 상태로 되돌리는 rollback이 있다

 

내장함수

- 함수의 입력 행수에 따라 단일행 함수와 다중행 함수로 구분할 수 있음

- 단일행 함수는 SELECT, WHERE, ORDER BY, UPDATE의 SET절에 사용 가능

 

단일행 NULL 관련 함수의 종류

- NVL(표현식1, 표현식2) : 표현식1의 결과값이 NULL이면 표현식2의 값을 출력한다

- NULLIF(표현식1, 표현식2) : 표현식1이 표현식2와 같으면 NULL을, 같지 않으면 표현식1을 리턴

- COALESCE(표현식1, 표현식2, ...) : 임의의 개수 표현식에서 NULL이 아닌 최초의 표현식을 나타낸다

 

GROUP BY 절에서는 SELECT 절과 달리 ALIAS 명을 사용할 수 없음

 

SELECT 문장의 실행 순서

; FROM - WHERE - GROUPBY - HAVING - SELECT - ORDER BY

 

SQL Server의 TOP N 질의문에서 N에 해당하는 값이 동일한 경우 함께 출력되도록 하는 WITH TIES 옵션을 ORDER BY 절과 함께 사용해야함

 

Join에 대한 설명

- 일반적으로 Join은 PK와 FK 값의 연관성에 의해 성립된다

- DBMS 옵티마이져는 FROM 절에 나열된 테이블들을 항상 2개씩 묶어서 Join을 처리한다

- EQUI Join은 Join에 관여하는 테이블 간의 컬럼 값들이 정확하게 일치하는 경우에 사용되는 방법이다

- EQUI Join은 '=' 연산자에 의해서만 수행되며, 그 이외의 비교 연산자를 사용하는 경우에는 모두 Non EQUI Join이다

- 대부분 Non EQUI Join을 수행할 수 있지만, 때로는 설계상의 이유로 수행이 불가능한 경우도 있다

 

 

 

 

 

 

 

'SQLD > SQL 기본 및 활용' 카테고리의 다른 글

정리_fin3  (0) 2023.03.18
정리_fin2  (0) 2023.03.18
정리 3  (0) 2023.03.15
관리 구문  (0) 2023.03.15
정리 2  (0) 2023.03.14

 

 

성능데이터모델링

; 데이터베이스 성능 향상을 목적으로 설계단계의 데이터 모델링 때부터 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것

 

성능데이터모델링 수행 절차

1. 데이터모데링을 할 때 정규화를 정확하게 수행

2. 데이터베이스 용량산정을 수행

3. 데이터베이스에 발생되는 트랜잭션의 유형 파악

4. 용량과 트랜잭션의 유형에 따라 반정규화 수행

5. 이력모델의 조정, PK/FK 조정, 슈퍼타입/서브타입 조정 등을 수행

6. 성능관점에서 데이터모델 검증

 

함수종속성 규칙에 따라 2차 정규화로 분리

 

칼럼에 의한 반복적인 속성값을 갖는 형태는 속성의 원자성으 위배한 제 1차 정규화의 대상

 

반정규화는 데이터 무결성이 깨질 수 있는 위험을 무릅쓰고 데이터를 중복하여 성능을 향상시키기 위한 기법으로 정보에 대한 재현의 적시성으로 판단한다

 

로우체이닝이 발생할 정도로 한 테이블에 많은 컬럼들이 존재할 경우 조회성능저하가 발생할 수 있음, 트랜잭션이 접근하는 컬럼유형을 분석하여 1:1 테이블을 분리하면 디스크 I/0가 줄어들어 조회 성능을 향상 시킬 수 있음

 

논리적으로 하나의 테이블이지만 물리적으로는 여러 개의 테이블로 분리하여 데이터 액세스 성능도 향상시키고, 데이터 관리 방법도 개선할 수 있도록 테이블에 적용하는 기법을 파티셔닝이라고 한다

 

인덱스가 값의 범위에 따라 일정하게 정렬이 되어 있을 때, 상수값으로 EQUAL 조건으로 조회되는 칼럼이 가장 앞으로 나오고 범위 조회하는 유형의 칼럼이 그 다음에 오도록 하는 것이 인덱스 범위를 좁힐 수 있는 가장 좋은 방법

 

분산데이터베이스 장점

- 지역 자치성, 점증적 시스템 용량 확장

- 신뢰성과 가용성

- 효용성과 융통성

- 빠른 응답 속도와 통신 비용 절감

- 데이터의 가용성과 신뢰성 증가

- 시스템 규모의 적절한 조절

- 각 지역 사용자의 요구 수용 증대

 

분산데이터베이스 단점

- 소프트웨어 개발 비용

- 오류의 잠재성 증대

- 처리 비용의 증대

- 설계, 관리의 복잡성과 비용

- 불규칙한 응답 속도

- 통제의 어려움

- 데이터 무결성에 대한 위협

 

분산데이터베이스 환경에서 데이터베이스 분산설계를 적용하여 효율성을 증대시킬 수 있는 것

- 공통코드, 기준 정보 등 마스터 데이터는 분산데이터베이스에 복제분산을 적용한다

- 거의 실시간 업무적인 특성을 가지고 있을 때 분산데이터베이스를 사용하여 구성할 수 있다

- 백업 사이트를 구성할 때 간단하게 분산기능을 적용하여 구성할 수 있다

 

GSI(global single instance)를 구성할 때는 통합 데이터베이스 구조를 사용해야함

 

 

 

'SQLD > 데이터 모델링의 이해' 카테고리의 다른 글

정리_fin1  (0) 2023.03.16
정리 2  (0) 2023.03.12
트랜잭션 Transaction, NULL  (0) 2023.03.12
반정규화 De-Normalization  (0) 2023.03.12
정규화 Normalization  (0) 2023.03.12

 

데이터 모델링의 첫 번째 목적은 정보시스템 구축의 대상이 되는 업무 내용을 정확하게 분석하는 것이며, 분석된 모델을 가지고 실제 데이터베이스를 생성하여 개발 및 데이터 관리에 사용하기 위한 것이 두 번째 목적이다

 

데이터 모델링의 유의점은 중복, 비유연성(데이터의 정의를 데이터의 사용 프로세스와 분리), 비일관성(데이터간의 상호 연관관계를 명확하게 정의)

 

개념적 데이터 모델링은 추상화 수준이 높고 업무중심적이고 포괄적인 수준의 모델링 진행, 전사적 데이터 모델링, EA 수립시 많이 이용

논리적 데이터 모델링은 시스템으로 구축하고자 하는 업무에 대해 key 속성, 관계 등을 정확하게 표현, 재사용성이 높음

물리적 데이터 모델링은 실제로 데이터베이스에 이식할 수 있도록 성능, 저장 등 물리적인 성격을 고려하여 설계

 

데이터베이스 스키마 구조 3단계 : 외부스키마, 개념스키마, 내부스키마

개념 스키마 - 모든 사용자 관점을 통합한 조직 전체 관점의 통합적 표현, 모든 응용시스템들이나 사용자들이 필요로 하는 데이터를 통합한 조직 전체의 DB를 기술한 것으로 DB에 저장되는 데이터와 그들 간의 관계를 표현하는 스키마

 

ERD 작성 순서

1. 엔터티를 그린다

2. 엔터티를 적절하게 배치한다

3. 엔터티간 관계를 설정한다

4. 관계명을 기술한다

5. 관계의 참여도를 기술한다

6. 관계의 필수여부를 기술한다

 

ERD 작성시, 가장 중요한 엔터티는 왼쪽 상단에서 조금 아래쪽 중앙에 배치

 

엔터티의 특징

- 반드시 해당 업무에서 필요하고 관리하고자 하는 정보여야 한다

- 유일한 식별자에 의해 식별이 가능해야 한다

- 영속적으로 존재하는 두 개 이상의 인스턴스의 집합이어야 한다

- 업무 프로세스에 의해 이용되어야 한다

- 엔터티는 반드시 속성이 있어야 한다

- 엔터티는 다른 엔터티와 최소 한 개 이상의 관계가 있어야 한다

 

발생시점에 따른 엔터티 분류

- 기본 엔터티 : 다른 엔터티로부터 주식별자를 상속받지 않고 자신의 고유한 주식별자를 가짐

- 중심 엔터티

- 행위 엔터티

 

속성

; 업무에서 필요로 하는 인스턴스에서 관리하고자 하는 의미상 더 이상 분리되지 않는 최소의 데이터 단위

 

엔터티, 인스턴스, 속성, 속성값의 관계

- 한 개의 엔터티는 두 개 이상의 인스턴스의 집합이어야 한다

- 한 개의 엔터티는 두 개 이상의 속성을 갖는다

- 한 개의 속성은 한 개의 속성값을 갖는다

 

속성에 특성에 따른 분류

- 기본속성

- 파생속성 : 데이터를 조회할 때 빠른 성능을 낼 수 있도록 하기 위해 원래 속성의 값을 계산하여 저장할 수 있도록 만든 속성

- 설계속성

 

도메인;

각 속성은 가질 수 있는 값의 범위가 있는데, 이를 도메인이라 하며 엔터티 내에서 속성에 대한 데이터 타입과 크기 그리고 제약사항을 지정하는 것

 

속성의 명칭 부여

- 해당 업무에서 사용하는 이름을 부여한다

- 서술식 속성명은 사용하지 않는다

- 약어 사용은 가급적 제한한다

- 전체 데이터 모델에서 유일성 확보하는 것이 좋다

 

데이터모델링의 관계

- 관계는 존재에 의한 관계와 행위에 의한 관계로 구분될 수 있으나 ERD에서는 관계를 연결할 때, 존재와 행위를 구분하지 않고 단일화된 표기법을 사용한다

- UML에는 클래스다이어그램의 관계 중 연관관계와 의존관계가 있고 이것은 실선과 점선의 표기법으로 다르게 표현된다

 

관계 표기법관계명, 관계차수, 관계선택사양의 3가지 개념으로 표현한다

- 관계명 : 관계의 이름

- 관계차수 : 1:1, 1:M, M:N

- 관계선택사양 : 필수관계, 선택관계

 

두 개의 엔터티 사이에 정의한 관계를 체크하는 사항

- 두 개의 엔터티 사이에 관심 있는 연관규칙이 존재하는가?

- 두 개의 엔터티 사이에 정보의 조합이 발생되는가?

- 업무기술서, 장표에 관계 연결을 가능하게 하는 동사(Verb)가 있는가?

- 업무기술서, 장표에 관계 연결에 대한 규칙이 서술되어 있는가?

 

주식별자를 지정할 때 고려해야 할 사항

- 유일성 : 주식별자에 의해 엔터티 내의 모든 인스턴스들이 유일하게 구분되어야 한다

- 최소성 : 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다

- 불변성 : 지정된 주식별자의 값은 자주 변하지 않는 것이어야 한다

- 존재성 : 주식별자가 지정이 되면 반드시 값이 들어와야 한다(Null 안됨)

 

식별자 관계

; 강한 연결관계 표현, 자식 주식별자의 구성에 포함됨, 실선 표현, 반드시 부모 엔터티 종속, 자식 주식별자구성에 부모 주식별자 표함 필요, 상속받은 주식별자속성을 타엔터티에 이전 필요

 

비식별자 관계

; 약한 연결관계 표현, 자식 일반 속성에 포함됨, 점선 표현, 약한 종속 관계, 자식 주식별자구성을 독립적으로 구성, 자식 주식별자구성에 부모 주식별자 부분 필요, 상속받은 주식별자속성을 타 엔터티에 차단 필요, 부모쪽의 관계 참여가 선택관계

 

엔터티별로 데이터의 생명주기를 다르게 관리할 경우, 예를 들어 부모엔터티의 인스턴스가 자식의 엔터티와 관계를 가지고 있었찌만 자식만 남겨두고 먼저 소멸할 경우 비식별자 관계로 연결하는 것이 적절하다

 

식별자의 분류 체계

대표성 여부

- 주식별자 : 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이며, 타 엔터티와 참조관계를 연결할 수 있는 식별자

- 보조식별자 : 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이나 대표성을 가지지 못해 참조관계 연결을 못함

스스로 생성 여부

- 내부식별자 : 엔터티 내부에서 스스로 만들어지는 식별자

- 외부식별자 : 타 엔터티와의 관계를 통해 타 엔터티로부터 받아오는 식별자

속성의 수

- 단일식별자 : 하나의 속성으로 구성된 식별자

- 복합식별자 : 둘 이상의 속성으로 구성된 식별자

대체여부

- 본질식별자 : 업무에 의해 만들어지는 식별자

- 인조식별자 : 업무적으로 만들어지지는 않지만 원조식별자가 복잡한 구성을 가지고 있기 때문에 인위적으로 만든 식별자

 

 

 

 

 

 

 

 

 

 

 

 

'SQLD > 데이터 모델링의 이해' 카테고리의 다른 글

정리_fin2  (0) 2023.03.16
정리 2  (0) 2023.03.12
트랜잭션 Transaction, NULL  (0) 2023.03.12
반정규화 De-Normalization  (0) 2023.03.12
정규화 Normalization  (0) 2023.03.12

 

- DML : INSERT, UPDATE, DELETE, MERGE

- TCL : COMMIT ROLLBACK, SAVEPOINT

- DDL : CREATE TABLE, ALTER TABLE, DROP TABLE, TRUNCATE TABLE

- DCL : CREATE USER, DROP USER, GRANT, REVOKE

 

PRIMARY KEY는 테이블당 1개씩만 생성할 수 있고 생성을 하지 않는 것도 가능하다

 

 

'SQLD > SQL 기본 및 활용' 카테고리의 다른 글

정리_fin2  (0) 2023.03.18
정리_fin1  (0) 2023.03.18
관리 구문  (0) 2023.03.15
정리 2  (0) 2023.03.14
계층 쿼리  (0) 2023.03.14

 

DML

; Data Manipulation Language, DDL에서 정의한 대로 데이터를 입력하고, 입력된 데이터를 수정, 삭제, 조회하는 명령어

 

INSERT

; 테이블에 데이터를 입력하는 명령어

 

INSERT INTO 테이블명(컬럼명1, 컬럼명2, ...) VALUES(데이터1, 데이터2, ...);

INSERT INTO 테이블명 VALUES(전체 컬럼에 입력될 데이터 리스트);

 

- 명시되지 않은 컬럼에는 NULL 값이 입력되는데 PK나 NOT NULL 제약조건이 걸린 컬럼에는 NULL 값이 입력될 수 없으니 주의해야함

- 전체 컬럼에 대한 데이터가 테이블의 컬럼 순서대로 빠짐없이 나열되어야 하는데 순서가 뒤바뀌어 데이터 유형이 맞지 않거나 누락된 데이터가 있어 전체 컬럼 갯수와 맞지 않았을 경우 데이터베이스는 에러 발생

 

UPDATE

; 이미 저장된 데이터를 수정하고 싶을 때 사용하는 명령어

수정하고 싶은 컬럼이 많으면 SET절에 ,(콤마)로 이어서 명시

 

UPDATE 테이블명 SET 컬럼명 = 새로운 데이터(WHERE 수정할 데이터에 대한 조건);

 

DELETE

; 이미 저장된 데이터를 삭제하고 싶을 때

 

DELETE FROM 테이블명 (WHERE 수정할 데이터에 대한 조건);

 

- TRUNCATE는 별도의 로그를 쌓지 않아 ROLLBACK이 불가능하지만 DELETE는 COMMIT 전에 ROLLBACK이 가능

 

MERGE

; 테이블에 새로운 데이터를 입력하거나 이미 저장되어 있는 데이터에 대한 변경 작업을 한 번에 할 수 있도록 해주는 명령어

 

 

TCL

; Transaction Control Language, 트랜잭션을 제어하는 명령어

트랜잭션이란 쪼개질 수 없는 업무처리의 단위, 한 세트로 묶일 수밖에 없는 논리적인 업무 단위

 

트랜잭션 특징

- 원자성 : 트랜잭션으로 묶인 일련의 동작들은 모두 성공하거나 모두 실패해야 한다

- 일관성 : 트랜잭션이 완료된 후에도 데이터베이스가 가진 데이터에 일관성이 있어야 한다

- 고립성 : 하나의 트랜잭션은 고립되어 수행되야 한다

- 지속성 : 트랜잭션이 성공적으로 수행되었을 경우 트랜잭션이 변경한 데이터가 영구적으로 저장되어야 한다

 

COMMIT

; INSERT, DELETE, UPDATE 후에 변경된 내용을 확정, 반영하는 명령어

COMMIT을 실행하지 않으면 메모리까지만 반영되는데, 메모리는 휘발성이기 때문에 언제든 사라질 수 있고 다른 사용자는 변경된 값을 조회할 수 있음, COMMIT을 실행해야 최종적으로 데이터 파일에 기록이 되고 비로소 트랜잭션이 완료됨

 

ROLLBACK

; INSERT, DELETE, UPDATE 후에 변경된 내용을 취소하는 명령어, ROLLBACK을 하면 변경하기 이전 값으로 복구됨

 

SAVEPOINT

; ROLLBACK을 수행할 때 전체 작업을 되돌리지 않고 일부만 되돌릴 수 있게 하는 기능

 

 

DDL

; Data Definition Language란 의미로 데이터를 정의하는 SQL

 

문자 유형은 CHAR와 VARCHAR 두 가지가 있는데, 둘의 차이는 크기가 고정이나 가변이냐이다

 

CREATE

; 테이블을 생성하기 위한 명령어

CREATE TABLE 테이블명(

        컬럼명1 데이터 타입(DEFAULT/NULL여부),

...

 

);

 

테이블 생성 시 반드시 지켜야 할 규칙

- 테이블명은 고유해야 한다

- 한 테이블 내에서 컬럼명은 고유해야 한다

- 컬럼명 뒤에 데이터 유형과 데이터 크기가 명시되어야 한다

- 컬럼에 대한 정의는 괄호 () 안에 기술한다

- 각 컬럼들은 , (콤마)로 구분된다

- 테이블명과 컬럼명은 숫자로 시작될 수 없다

- 마지막은 ; (세미콜론)으로 끝난다

 

CREATE TABLE을 할 때 제약조건 CONSTRAINT도 함께 정의해줄 수 있는데 제약 조건은 테이블에 저장될 데이터의 무결성을 위함

제약 조건의 종류

- PRIMARY KEY(기본키) : 테이블에 저장된 각각의 Row에 대한 고유성 보장, 한 테이블에 하나씩만 정의 가능, PK로 지정된 컬럼에는 NULL 값이 입력될 수 없고 자동으로 UNIQUE 인덱스로 생성

- UNIQUE KEY(고유키) : PRIMARY KEY와 유사한 목적이지만 NULL값이 허용됨

- NOT NULL

- CHECK : 컬럼에 저장될 수 없는 값의 범위를 제한

- FOREIGN EKY(외래키) : 하나의 테이블이 다른 테이블을 참고하고자 할 때

 

참조 무결성 규정 관련 옵션

- CASCADE : parent 값 삭제 시 child 값 같이 삭제

- SET NULL : parent 값 삭제 시 child의 해당 컬럼 NULL 처리

- SET DEFUALT : parent 값 삭제 시 child의 해당 컬럼 DEFAULT 값으로 변경

- RESTRICT : child 테이블에 해당 데이터가 PK로 존재하지 않는 경우에만 parent 값 삭제 및 수정 가능

- NO ACTION : 참조 무결성 제약이 걸려있는 경우 삭제 및 수정 불가

 

CREATE 테이블명 AS SELECT * FROM 복사할 테이블명;

; 완전히 새로운 테이블을 생성하는 것이 아니고 기존에 존재하던 테이블을 복사해서 생성하고 싶은 경우

제약조건의 NOT NULL 조건만 유지되며 나머지는 ALTER 명령어를 써서 정의해주어야 함

 

ALTER

- ADD COLUMN; 추가된 컬럼의 위치는 늘 맨 끝이 되며 별도의 위치를 지정해줄 수 없음

- DROP COLUMN; 한번 삭제한 컬럼은 복구할 수 없음

- MODIFY COLUMN; 기존에 있던 컬럼을 변경

- RENAME COLUMN; ALTER TABLE 테이블명 RENAME COLUMN 변경할 컬럼명 TO 변경할 이름;4

- ADD CONSTRAINT

- DROP TABLE

- TRUNCATE TABLE

 

 

DCL

; Data Control Language, USER를 생성하고권한을 부여하거나 회수하는 명령어

 

하나의 DATABASE는 여러 개의 USER를 가질 수 있음

- CREATE USER; 사용자를 생성하는 명령어

CREATE USER 사용자명 IDENTIFIED BY 패스워드;

- ALTER USERL; 사용자 변경하는 명령어

ALTER USER 사용자명 IDENTIFIED BY 패스워드;

- DROP USER; 사용자를 삭제하는 명령어

DROP USWER 사용자명;

 

권한 관련 명령어

- GRANT; 사용자에게 권한 부여

- REVOKE; 사용자에게 권한 회수

 

ROLE 관련 명령어

ROLE이란 특정 권한들을 하나의 세트처럼 묶는 것

 

ROLE을 이용한 권한 부여

- ROLE 생성; CREATE ROLE 롤명;

- ROLE에 권한 부여; GRANT 권한 TO 롤명;

- ROLE을 사용자에게 부여; GRANT 롤명 TO 사용자명;

 

 

 

'SQLD > SQL 기본 및 활용' 카테고리의 다른 글

정리_fin1  (0) 2023.03.18
정리 3  (0) 2023.03.15
정리 2  (0) 2023.03.14
계층 쿼리  (0) 2023.03.14
Top - N 쿼리, 셀프 조인 Self Join  (0) 2023.03.14

 

윈도우 절에 ORDER BY가 쓰였는데 범위 조건이 명시되어 있지 않으면 RANGE UNBOUNDED PRECENDING이 default

 

두 개의 SQL을 UNION으로 연결할 경우 헤드의 명칭은 첫 번째 SQL의 컬럼명 혹은 ALIAS를 따르게 된다

 

한 테이블 내에 연관이 있는 두 개의 컬럼이 존재하면 SELF JOIN을 수행한다

 

START WITH를 알아내려면 LEVEL = 1인 행을 본다

 

GROUPING 함수는 ROLLUP, CUBE, GROUPING SETS 등과 함께 쓰이며 소계를 나타내는 Row를 구분할 수 있게 해준다. GROUPING된 Row에는 1이 반환되며 그 밖의 Row에는 0이 반환된다

 

LEAD 함수는 파티션 별 n만큼 뒤에 있는 데이터를 구하는 함수로 LEAD(컬럼, n)에서 n을 생략했을 경우 기본값은 1이 된다. LEAD의 세 번째 인자값은 결과가 NULL일 경우 표기되는 DEFAULT 값에 해당한다

 

ROWNUM은 순위 함수가 아니라 순번을 매겨주는 슈도 컬럼이다

 

 

'SQLD > SQL 기본 및 활용' 카테고리의 다른 글

정리 3  (0) 2023.03.15
관리 구문  (0) 2023.03.15
계층 쿼리  (0) 2023.03.14
Top - N 쿼리, 셀프 조인 Self Join  (0) 2023.03.14
윈도우 함수  (0) 2023.03.14

+ Recent posts