youngseo's TECH blog

데이터베이스 본문

KAU

데이터베이스

jeonyoungseo 2022. 10. 23. 23:17

나만 알아보는 정리일 수 있음 주의

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 시스템의 주요 특성

  1. 스스로 설명 가능하다.
  2. 프로그램과 분리할 있다.
  3. 데이터 추상화가 가능하다.
  4. 유저는 유저가 관심있는 view 있다.
  5. 동시성 제어가 가능하다. 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개의 언어로 모두 표현 가능하다면 이렇게 표현 가능하다.

JOIN 종류 정리

튜플관계식 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