나만 알아보는 정리일 수 있음 주의
main 용어
RELATION
-테이블이름 (예_STUDENT)이라고 생각하자.
-R(A1, A2, A3, A4, …)라고 하면 R은 intension r은 extension
r(R)
INTENSION: 틀 R =(relation schema-테이블 정의, relation scheme, relation type)
EXTENSION: 내용물 r=(relation, relation state, relation instance-실제 값들)
DOMAIN- column value들의 집합 (100,200,300) =단순도메인:애트리뷰트가 원자값 / 복합도메인:복합값(연.월.일)
ATTRIBUTE-맨 위에 있는 애들(ATTRIBUTE이름은 다 달라야 한다.)
-(=relation state)
-attribute의 개수=차원
TUPLE-(애트리뷰트, 값)으로 구성된 쌍들의 집합이다.
Relation schema: R{A1, A2, A3, …An}
Flat relation model / first normal form - 모든 값이 atomic(null-unknown, inapplicable도 atomic)이어야 한다. 즉, 표 안에 표 있으면 안됨
제약조건
Domain constraints (개체 무결성): 각 attribute는 반드시 원자값이어야 한다. / 각 칼럼은 그 칼럼의 데이터 타입, 범위에 만족하는 값이어야 한다.
Key constraints(고유 무결성): primary key나 unique 칼럼에 중복되는 값이 있으면 안된다. Key는 Unique하고 minimal해야 한다.
Entity integrity constraints (NULL 무결성) : PK 내용물에 들어가는 value는 NULL일 수 없다.
Referential integrity constraints(참조 무결성):외래키는 참조할 수 없는 값을 가질 수 없다. 해당 데이터가 없는데?? PK-FK
-> insert, delete, modify, update 시 integrity violation이 나오면 어떤 행동을 취해야 하는가? 를 고려해야 할 수 있음
1.연산 거부
2.User에게 알리기
3.CASCADE option, SET NULL option
ON DELETE 나 ON UPDATE 시 SET NULL, CASCADE, SET DEFAULT 따라서,
CONSTRAINT EMPSUPERFK
FOREIGN KEY (Super_ssn) REFERENCES EMPLOYEE(Ssn) ON DELETE SET NULL또는DEFAULT ON UPDATE CASCADE
DBMS - 데이터베이스를 운영하고 관리하는 소프트웨어
Define(specify the types, specify the structure of the records), construct(store data, store relationships), manipulate(querying and updating), control
System catalog
시스템 그 자체에 관련이 있는 다양한 객체에 대한 정보를 포함하는 시스템 DB
자료 사전이라고 하기도 한다.
카탈로그에 저장된 정보를 메타 데이터라고도 한다.
일반 사용자도 sql을 이용하여 내용을 검색해볼 수 있다.
Insert, delete, update문으로 갱신은 허용 안 됨/갱신은 사용자가 sql문을 실행시켜 기본테이블, 뷰, 인덱스에 변화를 주면 자동으로 갱신함
시스템 카탈로그에 저장하는 데이터베이스 기술(description)을 Domain이라고 할 수 있다.
DB 시스템의 주요 특성
- 스스로 설명 가능하다.
- 프로그램과 분리할 수 있다.
- 데이터 추상화가 가능하다.
- 각 유저는 그 유저가 관심있는 view를 볼 수 있다.
- 동시성 제어가 가능하다. 각 transaction이 올바르게 실행되거나 중단되게 보장한다.
Transaction - isolation property 누군가 중간에 데이터 빼내고 그러면 안됨/ atomicity property 원자성
DBMS 장점
- 데이터 중복 및 불일치 최소화
- 데이터의 표준화
- DBMS 접근 프로그램의 변경 없이 데이터 저장 구조와 연산 변경 가능
- 데이터의 보안 향상
- 데이터의 일관성 및 무결성 유지
- 다양한 유형의 장애로부터 DB 복구 가능
- 시스템 개발 및 유지보수 비용 절감
- 동시 접근 가능(병행수행 제어)
데이터 독립성(Physical Data Independence)
하나의 DB에는 위의 세 가지 유형의 스키마가 존재하지만, 이는 DB를 바라보는 관점이 다른 뿐 모두 같은 DB를 표현한다.
실제 데이터는 물리적 저장 장치에 저장된 DB에만 존재하므로 사용자가 DB에 접근하려면 외부 스키마 ———> 개념 스키마 ——→ 내부 스키마로 들어가야 한다. ★이 때 스키마들끼리 어떤 것들이 같은 것인지 유기적인 대응관계 표시가 필요하다.
-논리적 데이터 독립성
개념스키마에 새로운 내용이 추가되거나 기존 내용이 삭제되어도 외부 스키마는 영향을 받지 않는다.
-물리적 데이터 독립성
내부 스키마가 변경되더라도 개념스키마가 영향을 받지 않아 외부 스키마도 영향을 받지 않는다.
둘 구분**********
DBMS 컴포넌트 모듈
스카미 정의를 처리하여 DBMS 카탈로그에 저장 - DDL compiler
디스크에 저장된 DBMS 정보에 대한 접근 제어 - stored data manager
데이터베이스에 대한 검색, 갱신 연산을 받아 실행 - runtime database processor
응용 프로그램에서 추출된 DML 명령 컴파일 -precompiler
Three-tier Architecture
프리젠테이션 계층 또는 사용자 인터페이스, (CLIENT) : GUI, CUI, Web Interface
데이터가 처리되는 애플리케이션 계층 : App / Web SERVER
그리고 애플리케이션과 연관된 데이터가 저장 및 관리되는 데이터 계층 : Database Server
QUERY
DDL-CREATE, ALTER, DROP, RENAME (구조를)
DML-SELECT, INSERT, UPDATE, DELETE (데이터를)
Manipulating : 데이터를 DBMS가 통제하는 저장매체에 저장하는 기능
DCL(control)-데이터의 무결성일관성 유지 / 접근 권한 검사 / 동시성 제어
헷갈리는 QUERY문 정리
DROP TABLE DEPENDENT CASCADE;
DELETE FROM TABLE WHERE Lname='Brown';
UPDATE EMPLOYEE SET Salary = Salary*1.1 WHERE Dno=5;
UPDATE는 attribute값 업데이트하고 ALTER은 정보 변경 및 수정이다. 둘 구분*************
<WHERE>
WHERE Dno IN (SELECT Dnumber -형태 비슷해야 함
WHERE EXISTS ( SELECT ~ -> T/F
WHERE UNIQUE (SELECT ~ -> T/F
<JOIN>
ATABLE JOIN BTABLE ON Dnum=Dno
ATABLE NATURAL JOIN BTABLE AS B(Dno, Dname, Ssn)
OUTER JOIN (조인에 참가하지 못한 애들도) 얘네도 ON 써줘야 함
<aggregate - 집계함수>
COUNT(*)
COUNT(DISTINCT SALARY)
<GROUP BY, HAVING>
SELECT 절 안에 있는 것들이 다 GROUP BY랑 HAVING에 있어야 함
왜냐고? WHERE 다음 HAVING 적용되므로
<참고>
WITH 새로운 이름 AS (SELECT FROM ~)
UPDATE EMPLOYEE SET Salary=
CASE WHEN Dno=5 THEN Salary +2000
<VIEW>
CREATE VIEW TABLE(Ssn, Dname) AS SELECT Ssn, Dname FROM EMPLOYEE WHERE Dept='컴퓨터';
변경 시..
UPDATE
SET
WHERE
DROP VIEW WORK_ON;
관계대수식
이 관계대수식에 대응되는 트리자료 구조를 질의 트리라고 명칭한다.
관계대수식은 위 그림에서도 볼 수 있듯이 절차적인 형식이다.
기본연산은
SELECT, PROJECT, JOIN, DIVISION
집합 연산은
UNION, DIFFERENCE, INTERSECTION, CARTESIAN PRODUCT
Natural JOIN 표기 밑에 n 또는 *
Relationally complete - > 5개의 언어로 모두 표현 가능하다면 이렇게 표현 가능하다.
튜플관계식 t.~~| Department(t) and t.Dno=d.Dnumber
도메인관계식 lq | (E w)EMPLOYEE(lmno)
정규화
정규화를 거치지 않으면 이상현상(anomaly) 생길 수 있다.
-삽입 이상(이걸 삽입할라면 다른 것들은 null 값으로 채워야 하네) / 삭제 이상(삭제 안해야 될 것까지 삭제되네) / 갱신 이상(일일히 이 테이블에 있는 거 찾아서 갱신해야 되네)
목적?
- 중복을 배제하여 삽입, 삭제, 갱신 이상의 발생을 방지
- 각 릴레이션에 중복된 종속성을 여러개의 릴레이션에 분할
- 어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 함
- 데이터 삽입 시 릴레이션을 재구성할 필요성 감소
- 효과적인 검색 알고리즘 생성 가능
제 1 정규화 = 1NF: 테이블의 컬럼이 atomic 을 갖도록
제 2 정규화: 제1을 진행한 테이블에 대해 완전함수종속 FFD 만족. 기본키의 부분집합이 결정자가 되어선 안된다.
-> PK 또는 CK 중에 부분종속으로도 되는 애들을 띄어낸다.
제 3 정규화: 이행적 종속 없애도록 테이블 분해
BCNF: 모든 결정자는 주 식별자여야한다
제 4 정규화 - 다가종속 MVD이 두 개 이상일 때. 다가종속은 다대다 관계로 해석하는 게 쉽다. R:X ->> Y|Z 라고 한다면 X->Y X->Z 이렇게 두 개로 나누어야 한다.
제 5 정규화 -Join Dependency. 어떤릴레이션을 분해(정규화)한 후 다시 조인해서 원래의 릴레이션으로 복원할 수 있다면 그렇게 분해한다. 매우 이상적인 정규화 과정이라고 할 수 있어서 여기까지 만족시키는 건 쉽지 않다.
Join Dependency > Multi Valued Dependency > Functional Dependency
Full Functional Dependency? - 모든 Primary key를 가지고 해야만 특정 가능하다.
WORKS_ON(Ssn, Pnumber, Hours) 에서 Ssn, Pnumber가 PrimaryKey면 두 개가 다 있어야만 Hours 특정 가능
Partial Functional Dependency? - primary key 중 부분집합을 가지고도 특정 가능
EMPLOYEE(Ssn, Ename, Bdate) 에서 Ssn이 Primary Key라면 Ssn, Ename 중 Ssn만 가지고도 Bdate 특정 가능
KEY에 대한 설명
Super key-한 릴레이션 내에 있는 속성들의 집합으로 구성된 키. 유일성은 만족하나 최소성은 만족시키지 않음.
Ex) 학생 릴레이션에서 '학번', '주민번호', '학번+주민번호', '학번+주민번호+성명'으로 구성 가능
Candidate key-튜플을 유일하게 식별할 수 있는 속성들의 부분집합. 모든 튜플에 대해서 유일성/최소성을 만족해야 함
Ex)릴레이션에서 '학번'이나 '주민번호'. 즉 기본키가 될 수 있는 키들을 후보키라고 함
Primary key -후보키 중에서 선택한 main key
Alternate key-후보키가 둘 이상일 때 primary key를 제외한 나머지 키
<E-R Diagram>
attribute 동그라미 / entity 네모 / relationship 마름모
X->Y 함수적 종속성이 성립한다. 무조건 X가 a이면 Y는 b여야 함
집합값을 가진 attribute는 두줄로 동그라미
Department한 개에 N개의 Employee가 있을 수 있다.
Department는 무조건 manager이 있어야 한다.
Weak entity는 네모를 두 줄로, 마름모도 두 줄로. 그리고 owner 관계가 있다. Owner의 네모는 한 줄
Partial key로 그래도 구분할 수 있는 key를 선정할 수 있는데 점선으로 표현
'KAU' 카테고리의 다른 글
[KOTLIN] 객체지향 프로그래밍 문법 정리 (0) | 2022.12.12 |
---|---|
컴퓨터 구조론 (2) | 2022.10.23 |
개발 블로그 시작 (0) | 2022.05.21 |