[실기/기출,데일리] SQL 23 ~ 21 기출문제&수제비 카페 데일리문제 내용 정리

이하얀·2024년 4월 24일
0

📥 정보처리기사

목록 보기
13/13
post-thumbnail

🤍 데이터베이스 설계 순서 5가지 = 요, 개, 논, 물, 구 [21년 1회, 23년 2회]

1️⃣ 구 조건 분석

  • 요구 조건 명세서 작성

2️⃣ 개념적 설계 → 개념 스키마 모델링, 트랜잭션 모델링, E-R 다이어그램

  • 현실 셰계에 대한 인식을 추상적 개념으로 표현하는 과정
  • 개념 스키마 모델링과 트랜잭션 모델링을 수행
  • 요구 조건 명세를 E-R 다이어그램으로 작성

3️⃣ 논리적 설계 → 목표 DBMS에 맞는 논리 스키마 설계, 트랜잭션 인터페이스 설계

  • 현실의 자료를 특정 DBMS가 지원하는 자료구조로 변환하는 과정
  • 트랜잭션의 인터페이스 설계
  • 정규화를 통해 스키마를 평가 및 정제

4️⃣ 물리적 설계 → 목표 DBMS에 맞는 물리적 구조의 데이터로 변환

  • 논리적 구조로 표현된 데이터를 디스크 등의 저장장치에 저장할 수 있는 데이터로 변환하는 과정
  • 파일의 저장 구조 및 엑세스 경로를 결정하여, 테이블 정의서 및 명세서가 산출됨.

5️⃣

  • 목표 DBMS의 DDL(데이터정의어)로 데이터베이스 생성, 트랜잭션 작성

🤍 정규화(Normalization) 과정 6단계= 도, 부, 이, 결, 다, 조 [21년 2회]

  • 개념: 테이블의 속성들이 상호 종속적인 관계를 갖는 특성을 이용하여 테이블을 무손실 분해하는 과정
  • 정규화 과정
    • 비정규 릴레이션 ➡️ 1NF : 메인인 원자값
    • 1NF ➡️ 1NF : 분적 함수 종속 제거
    • 2NF ➡️ 3NF : 행적 함수 종속 제거
    • 3NF ➡️ BCNF(보이스코드정규형) : 정자이면서 후보키가 아닌 것 제거
    • BCNF ➡️ 4NF : 치 종속 제거
    • 4NF ➡️ 5NF : 인 종속성 이용

🤍 반정규화(Denormalization) [21년 1회]

  • 시스템의 성능을 향상시키고 개발 및 운영의 편의성 등을 높이기 위해 정규화된 데이터 모델을 의도적으로 통합, 중복, 분리하여 정규화 원칙을 위배하는 행위

🤍 데이터 모델의 구성 요소 3가지 = 연, 구, 제 [21년 1회]

  • 산(Operation)
    • 데이터베이스에 저장된 실제 데이터를 처리하는 작업에 대한 명세로서 데이터베이스를 조작하는 기본 도구에 해당
  • 조(Structure)
    • 논리적으로 표현된 객체 타입들 간의 관계로서 데이터의 구성 및 정적 성질을 표현
  • 약 조건
    • 데이터베이스에 저장될 수 있는 실제 데이터의 논리적인 제약 조건을 의미

🤍 DAC(임의 접근 통제, Discretionary Acess Control) [21년 1회]

  • 접근 통제는 데이터가 저장된 객체와 이를 사용하려는 주체 사이의 정보 흐름을 제한하는 것임.
  • 이러한 접근 통제에 관한 기술 중 DAC는 데이터에 접근하는 사용자의 신원에 따라 접근 권한을 부여하여 제어하는 방식으로, 데이터의 소유자가 접근 통제 권한을 지정하고 제어함.
  • 객체를 생성한 사용자가 생성된 객체에 대한 모든 권한을 부여받고, 부여된 권한을 다른 사용자에게 허가할 수도 있음.

🤍 트랜잭션의 특성 4가지 = 원, 일, 격, 영 [20년 1회, 21년 2회]

  • 자성(Atomicity)
    • 트랜잭션의 연산 전체가 성공 또는 실패(All or Nothing)되어야 하는 성질
  • 관성(Consistency)
    • 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 하는 성질
  • 리성=고립성(Isolation)
    • 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않아야 한다는 성질
  • 속성(Durability)
    • 성공이 완료된 트랜잭션의 결과는 영속적으로 데이터베이스에 저장되어야 하는 성질

🤍 DDL(정의), DML(조작), DCL(제어)

DDL(데이터 정의어)

💚 DDL 4가지 = CREATE, ALTER, DROP, TRUNCATE

1️⃣ CREATE(생성)

  • 테이블 생성: CREATE TABLE 테이블명 (컬럼명 데이터타입 (키) 제약조건);
CREATE TABLE 테이블명
(
	컬럼명 데이터타입 PRIMARY KEY, -- 기본키 설정
	컬럼명 데이터타입 FOREIGN KEY REFERENCES 참조테이블(기본키), -- 외래키 설정
	컬럼명 데이터타입 UNIQUE,
	컬럼명 데이터타입 NOT NULL,
	컬럼명 데이터타입 CHECK(조건식) -- 제약 조건 설정
	컬럼명 데이터타입 DEFAULT);

-- 실제 예시
CREATE TABLE Employees
(
    EmployeeID INT PRIMARY KEY,
    DepartmentID INT FOREIGN KEY REFERENCES Departments(DepartmentID),
    FirstName VARCHAR(50) NOT NULL,
    LastName VARCHAR(50) NOT NULL,
    Email VARCHAR(100) UNIQUE,
    Salary DECIMAL(10,2) CHECK(Salary >= 0),
    HireDate DATE DEFAULT GETDATE()
);

-- 제약 조건 예시
- 예시) 사람이라는 테이블 생성
    - 사람이라는 테이블에는 이름, 성별이라는 컬럼이 있는데, 이름은 VARCHAR(10) 데이터 타입을 가지고, 성별은 CHAR(1) 데이터 타입을 가지고 있음.
    - 성별은 추가로 ‘M’과 ‘F’ 값만 가질 수 있도록 제약 조건을 걸고자 함.
[]
CREATE TABLE 사람
(
	이름 VARCHAR(10)
	성별 CHAR(1) CHECK(성별='M' OR 성별='F)
);

2️⃣ ALTER(수정) - ADD

  • 테이블에 컬럼 추가 : ALTER TABLE 테이블명 ADD 칼럼명 데이터 타입 (키) 제약조건;
-- BirthDate 컬럼은 DATE 데이터 유형으로 설정되며 NOT NULL 제약 조건 적용
ALTER TABLE Employees ADD BirthDate DATE NOT NULL;

-- 사원 테이블에 VARCHAR(11) 타입으로 전화번호라는 컬럼을 추가한다면?
ALTER TABLE 사원 ADD 전화번호 VARCHAR(11);

3️⃣ DROP(테이블 자체 삭제), TRUNCATE(내용만 삭제)

DML(데이터 조작어)

💚 DML 4가지 = SELECT, INSERT, UPDATE, DELETE

1️⃣ SELECT(조회) : 테이블 내 칼럼에 저장된 데이터 조회

  • IN 연산자 사용법 = 칼럼 IN(값1, 값2, …) [20년 2회]

  • BETWEEN 사용법 = WHERE 칼럼 BETEEN 값1 AND 값2(값1, 값2, …) [20년 2회]

    💡 문제로 이해!

    • 다음은 고객 테이블이다. 나이가 50살 이상이면서 59살 이하이고, 성별이 남자인 사람의 이름을 출력하는 쿼리를 작성하시오.
      (단, BETWEEN 구문을 사용해야 한다.)
      
      <고객> 테이블
      
      | 이름 | 나이 | 성별 | 주소 |
      | --- | --- | --- | --- |
      | 홍길동 | 20 | 남 | 경기도 |
      | 임꺽정 | 59 | 남 | 전라도 |
      | 유관순 | 35 | 여 | 경상도 |
      | 나혜석 | 41 | 여 | 충청도 |
      | 이순신 | 33 | 남 | 강원도 |
      
      ```sql
      SELECT 이름 FROM 고객
      WHERE 나이 BETWEEN 50 AND 59
      AND 성별 = '남';
      ```
  • DISTINCT(중복제거) [22년 3회]
    • 중복되는 칼럼을 제거함.
  • COUNT 연산자 = COUNT(칼럼명) | COUNT(*) [22년 2회]
    • 복수 행의 줄 수를 구하는 집계 함수
      • COUNT(칼럼명) : NULL 제외 카운트
      • COUNT(*) : NULL 포함 전부 카운트

2️⃣ INSERT(삽입) : 테이블 내 칼럼에 데이터 추가

  • 있는 칼럼에 데이터 추가 = INSERT INTO 테이블명(칼럼) VALUES(데이터); INSERT INTO 테이블명(칼럼1, 칼럼2, …) VALUES(데이터1, 데이터2,…)
    다음은 테이블 및 컬럼명에 대한 명세이다.
    사원명이 홍길동, 나이가 24, 급여가 300인 직원을 직원 테이블에 삽입하는 쿼리
    - 테이블명 : EMPLOYEE(직원 테이블)
    - 칼럼명 : NAME(사원명), AGE(나이), SALARY(급여)
    
    INSERT INTO EMPLOYEE(NAME, AGE, SALARY)
    VALUES('홍길동', 24, 300);
    🚨 **추가하는 경우 혼동 주의!** - 칼럼 자체를 추가 한다면 → **ALTER TABLE** 테이블명 **ADD** 컬럼명 데이터타입 [제약조건]; - 있는 칼럼에 데이터를 추가 한다면 → **INSERT INTO** 테이블명(칼럼) **VALUES**(데이터);

3️⃣ UPDATE(갱신) - SET : 테이블 내 칼럼에 저장된 데이터 수정

  • 데이터 내용을 변경(수정)할 때 사용하는 명령어
    • UPDATE 테이블명 SET …
      UPDATE 테이블명
      SET 속성명 = 데이터,WHERE 조건;
      
      -- 예시
      UPDATE 회원 SET 전화번호 =010-14WHERE 회원번호 = ‘N4’;

4️⃣ DELETE(삭제) : 테이블 내 칼럼에 저장된 데이터 삭제 [20년 3회]

🚨 주의점 : DELETE는 해당하는 행 자체를 삭제하기 때문에 FROM 앞에 *을 하지 않음!!!!

  • 튜플을 삭제하는 경우 DELETE 명령어 사용
    • DELETE FROM 테이블명 WHERE 조건;
    • 예시) 학생 테이블에서 이름이 민수인 튜플을 삭제하는 SQL문
      DELETE FROM 학생 WHERE 이름 = ‘민수’;

💚 JOIN 컬럼 ON 조건 [21년 2회]

  • 조인 조건으로 ON을 사용

💚 JOIN 종류 5가지 = 내, 왼외, 오외, 완외, 교, 셀 [21년 2회]

1️⃣ 내부조인 → JOIN 테이블 ON

  • 같은 이름의 칼럼이 여러 테이블에 있을 경우 ‘별칭.컬럼명’ 형태로 명시
  • INNER 키워드 : 생략해도 내부 조인은 가능
  • 검색 조건 추가 시 ➡️ 조인된 값에서 ➡️ 해당 조건에 맞는 결과만 출력되도록 설정
    SELECT A.칼럼1, A.칼럼2, ..., B.칼럼1, B.칼럼2, ...
    FROM 테이블1 A [INNER] JOIN  테이블2 B
    ON 조인조건
    [WHERE 검색조건];

2️⃣ 왼부조인 → LEFT JOIN 테이블 ON

  • OUTER 키워드 : 생략해도 왼쪽 외부 조인 가능
  • 검색 조건 추가 시 ➡️조인된 값에서 ➡️ 해당 조건에 맞는 결과만 출력되도록 설정
    SELECT A.칼럼1, A.칼럼2, ..., B.컬럼1, B.칼럼2, ...
    FROM 테이블1 A LEFT [OUTER] JOIN 테이블2 B
    ON 조인조건
    [WHERE 검색조건];

3️⃣ 오른쪽 부조인 → RIGHT JOIN 테이블 ON

  • OUTER 키워드 : 생략해도 오른쪽 외부 조인 가능
  • 검색 조건 추가 시 ➡️조인된 값에서 ➡️ 해당 조건에 맞는 결과만 출력되도록 설정
    SELECT A.칼럼1, A.칼럼2, ..., B.컬럼1, B.칼럼2, ...
    FROM 테이블1 A RIGHT [OUTER] JOIN 테이블2 B
    ON 조인조건
    [WHERE 검색조건];

4️⃣ 완부조인 → FULL JOIN 테이블 ON

  • OUTER 키워드 : 생략해도 완전 외부 조인 가능
  • 검색 조건 추가 시 ➡️조인된 값에서 ➡️ 해당 조건에 맞는 결과만 출력되도록 설정
    SELECT A.칼럼1, A.칼럼2, ..., B.컬럼1, B.칼럼2, ...
    FROM 테이블1 A FULL [OUTER] JOIN 테이블2 B
    ON 조인조건
    [WHERE 검색조건];

5️⃣ 교차조인 → CROSS JOIN 테이블 (ON 없음)

  • 조인 조건이 없는 모든 데이터 조합을 추출하기 때문에 ON절 없음!
    SELECT 컬럼1, 컬럼2, ...
    FROM 테이블1 CROSS JOIN 테이블2

6️⃣ 셀프 조인

  • 같은 테이블을 조인하는 경우임!
  • 같은 테이블명을 쓰고 별칭만 A, B와 같이 다르게 함.
  • 검색 조건 추가 시 ➡️조인된 값에서 ➡️ 해당 조건에 맞는 결과만 출력되도록 설정
    SELECT A.칼럼1, A.칼럼2, ..., B.칼럼1, B.칼럼2, ...
    FROM 테이블1 A [INNER] JOIN  테이블1 B
    ON 조인조건
    [WHERE 검색조건];

DCL(데이터 제어어)

💚 DCL(데이터 제어어) 2가지 = GRANT, REVOKE [21년 3회]

1️⃣ GRANT 권한 ON 테이블 TO 사용자;

  • 사용 권한 부여
    • 관리자(DBA)가 사용자에게 데이터베이스에 대한 권한을 부여하는 명령어

      GRANT 권한 ON 테이블 TO 사용자;
      
      ex) 관리자가 사용자 장길산에게 '학생' 테이블에 대해 UPDATE 할 수 있는 권한 부여
      GRANT UPDATE ON 학생 TO 장길산;

2️⃣ REVOKE 권한 ON 테이블 FROM 사용자;

  • 사용 권한 취소
    • 관리자(DBA)가 사용자에게 부여했던 권한을 회수하기 위한 명령어

      REVOKE 권한 ON 테이블 FROM 사용자;
      
      ex) 관리자가 사용자 장길산에게 '학생' 테이블에 대해 UPDATE 할 수 있는 권한을 회수
      REVOKE UPDATE ON 학생 FROM 장길산;

🤍 로킹 [21년 2회]

  • 데이터베이스의 병행제어 기법 중 하나
  • 접근한 데이터에 대한 연산을 모두 마칠 때까지 추가적인 접근은 제한함으로써 상호 배타적으로 접근하여 작업을 수행하도록 하는 기법

🤍 GRANT의 기능 [21년 3회]

  • DCL의 하나로, 데이터베이스 관리자가 사용자에게 권한을 부여하는 데 사용하는 명령어

🤍 DB 트랜잭션 연산 = Redo, Undo [22년 1회]

  • Redo → 시작(start) O, 종료(commit) O
    • 데이터베이스가 비정상적으로 종료되었을 때, 디스크에 저장된 로그를 분석하여 트랜잭션의 시작(start)과 종료(commit)에 대한 기록이 있는 트랜잭션들의 작업을 재작업
    • 즉, 로그를 이용해 해당 데이터 항목에 대해 이전 값을 이후 값으로 변경하는 연산임.
  • Undo → 시작(start) O, 종료(commit) X
    • 데이터베이스가 비정상적으로 종료되었을 때, 디스크에 저장된 로그를 분석하여 트랜잭션의 시작을 나타내는 ‘start’는 있지만 완료를 나타내는 ‘commit’ 기록이 없는 트랜잭션들이 작업한 내용들을 모두 취소
    • 즉, 로그를 이용해 해당 데이터 항목에 대해 이후 값을 이전 값으로 변경하는 연산임.

🤍 정렬 = ORDER BY 칼럼 ASC | ORDER BY 칼럼 DESC [21년 2회, 22년 1회]

  • 정렬 : 키워드 생략 시 오름차순
    • 오름차순 : ORDER BY 컬럼 ASC

    • 내림차순 : ORDER BY 컬럼 DESC

      # 21년 2회
      # [학생] 테이블을 이용해 이름이 이로 시작하는 학생들에 대해 내림차순 정렬
      SELECT * FROM 학생
      WHERE 이름 LIKE DESC ORDER BY 이름 "이%";
      # 22년 1회
      # 점수에 대해 내림차순 하는 SQL
      SELECT NAME, SCORE
      FROM 성적
      ORDER BY SCORE DESC;
      
      # 성적 테이블의 이름, 과목, 성적을 성적순(내림차순)으로 출력하는 쿼리
      #(성적 테이블의 칼럼은 이름, 과목, 성적 이 3개가 전부이니, *도 무방)
      SELECT * FROM 성적
      ORDER BY 성적 DESC;

🤍 이상 종류 3가지 = 삽, 삭, 갱 [22년 1회]

  • 이상이란?
    • 데이터의 중복으로 인해 테이블 조작 시 문제가 발생하는 현상
    • 입 이상
      • 테이블에 데이터를 삽입할 때 의도와는 상관없이 원하지 않은 값들로 인해 삽입할 수 없게 되는 현상
    • 제 이상(22년 1회 6번)
      • 테이블에서 튜플을 삭제할 때 의도와는 상관없는 값들도 함께 삭제되는 현상
    • 신 이상
      • 테이블에서 튜플에 있는 속성 값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 불일치성에 생기는 현상

🤍 관계 해석 [22년 2회]

  • 문제1) 데이터베이스에 대한 다음 설명에서 괄호에 공통으로 들어갈 알맞은 용어를 쓰시오.
    • ( 관계 해석 )은 관계 데이터의 연산을 표현하는 방법으로, 관계 데이터 모델의 제안자인 코드(E. F. Codd)가 수학의 술어 해석(Predicate Calculus)에 기반을 두고 관계 데이터베이스를 위해 제안했다.
    • 원하는 정보가 무엇이라는 것만 정의하는 비절차적 특성을 지니며, 원하는 정보를 정의할 때 계산 수식을 사용한다.
    • 튜플 해석식을 사용하는 튜플 ( 관계 해석 )과 도메인 해석식을 사용하는 도메인( 관계 해석 )으로 구분된다.

🤍 다중 행 비교 연산자 4가지 = IN, ANY(=SOME), ALL, EXISTE [22년 2회]

  • 다중 행 비교 연산자는 단일 행 비교 연산자(<, >, =, <>)와 결합해 사용 가능
  • IN : 리턴되는 값 중 조건에 해당하는 값이 있으면 참
  • ANY(=SOME) : 서브쿼리에 의해 리턴되는 각각의 값과 조건을 비교해 하나 이상 만족하면 참
  • ALL : 값을 서브쿼리에 의해 리턴되는 모든 값과 조건값을 비교하여 모든 값을 만족해야만 참
  • EXISTS : 메인 쿼리의 비교 조건이 서브쿼리의 결과 중에서 만족하는 값이 하나라도 존재하면 참

  • 답 : ALL

    • 서브쿼리로 도출된 모든 값이 조건을 만족해야 하므로 ALL연산자를 사용
    • “모든 제품의 단가보다”
  • 예시


🤍 COUNT [22년 2회]

  • COUNT(*) : NULL도 포함 가능
  • COUNT(칼럼) : NULL은 포함 안됨.


🤍 관계 대수식 π [22년 2회]

πTTL(EMPLOYEE)π_{TTL}(EMPLOYEE)


🤍 함수적 종속(Functional Dependency) [22년 2회]

  • 어떤 테이블 R에서 X와 Y를 각각 R의 속성 집합의 부분 집합이라 할 때

    • 속성 X의 값 각각에 대해 시간에 관계없이 항상 속성 Y의 값이 오직 하나만 연관되어 있을 때 'Y는 X에 함수적 종속' 또는 'X가 Y를 함수적으로 결정한다'라고 하며 X→Y로 표기한다.
    • X→Y의 관계에서 X를 결정자(Determinant), Y를 종속자(Dependent)
    • 연관이라는 개념을 결정짓는다라는 개념으로 보면될듯 → X가 결정되면 Y도 결정된다.
  • 종류 3가지 완, 부, 이 [22년 2회]

    • Full Functional Dependency(전 함수적 종속)
      • X→Y이면서도 X의 임의의 진부분집합인 Z와는 종속관계가 없는 속성
    • Partial Functional Dependency(분 함수적 종속)
      • X→Y이면서도 X의 임의의 진부분집합인 Z와도 Z→Y인 속성
    • Transitive Functional Dependency(행적 함수적 종속)
      • A→B이고 B→C일 때, A→C를 만족하는 관계


🤍 관계 대수 U, -, X, π, ⋈ [22년 3회]

  • 관계 대수의 개념
    • 관계형 데이터베이스에서 원하는 정보와 그 정보를 검색하기 위해서 어떻게 유도하는가를 기술하는 절차적인 언어
  • 연산
    • 일반 집합 연산자 4가지 = U, ∩, - X
      • Union(합집합) : U
      • Intersection(교집합) :
      • Difference(차집합) : -
      • Cartesian product(교차곱) : X
    • 순수 관계 연산자 4가지 = σ π ⋈ ÷
      • Select : σ
      • Project : π
      • 조인 :
      • Division(나누기) : ÷

🤍 중복 제거 문제 풀이 시 주의 [22년 3회]

  • 문제 7) 다음과 같이 테이블을 정의하고 튜플을 삽입하였을 때, 각 번호( ①, ② )의 SQL문을 실행한 결과를 쓰시오.

CREATE TABLE 부서 (
부서코드 INT PRIMARY KEY,
부서명 VARCHAR(20)
);
CREATE TABLE 직원 (
직원코드 INT PRIMARY KEY,
부서코드 INT,
직원명 VARCHAR(20),
FOREIGN KEY(부서코드) REFERENCEs 부서(부서코드) ON DELETE CASCADE
);

INSERT INTO 부서 VALUES(10, '영업부');
INSERT INTO 부서 VALUES(20, '기획부');
INSERT INTO 부서 VALUES(30, '개발부');

INSERT INTO 직원 VALUES(1001, 10, '이진수');
INSERT INTO 직원 VALUES(1002, 10, '곽연경');
INSERT INTO 직원 VALUES(1003, 20, '김선길');
INSERT INTO 직원 VALUES(1004, 20, '최민수');
INSERT INTO 직원 VALUES(1005, 20, '이용갑');
INSERT INTO 직원 VALUES(1006, 30, '박종일');
INSERT INTO 직원 VALUES(1007, 30, '박미경');

① SELECT DISTINCT COUNT(부서코드) FROM 직원 WHERE 부서코드 = 20;

② DELETE FROM 부서 WHERE 부서코드 = 20;
     SELECT DISTINCT COUNT(부서코드) FROM 직원;

  • ① 3
    ② 4
        

🤍 E-R 다이어그램 요소 6가지 = 개, 관, 속, 다속, 개관연, 관관속연 [22년 3회]

  • ☐ (사각형) - 개체
  • ◇ (마름모) - 관계 (개체들의 관계 집합)
  • ○ (타원) - 속성
  • ◎ (이중타원) - 다중값 속성
  • ⎯ (실선) - 개체와 관계집합의 연결
  • -- (점선) - 관계집합과 관계집합의 속성과의 연결


🤍 릴레이션 구성 용어 3가지 = 튜플, 릴레이션 인스턴스, 카디널리티 [23년 1회]

  • 튜플
    • 릴레이션을 구성하는 각각의 행을 의미하며, 파일 구조에서는 레코드에 해당함.
  • 릴레이션 인스턴스
    • 데이터 개체를 구성하고 있는 속성들에 데이터 타입이 정의되어 구체적인 데이터 값을 가진 것으로, 실제 값을 가진 튜플을 의미함.
  • 카디널리티
    • 튜플의 개수를 의미함.

🤍 스키마 3가지 = 외, 개, 내

  • 부 스키마 → 사용자, 개발자 관점 DB 논리적 구조
    • 사용자나 개발자의 관점에서 필요로 하는 데이터베이스의 논리적 구조
    • 사용자 뷰를 나타내고, 서브 스키마로 불림.
  • 념 스키마 → DB 전체 논리적 구조
    • 데이터베이스의 전체적인 논리적 구조
    • 전체적 뷰를 나타냄
    • 개체 간 관계, 제약 조건, 접근 권한, 무결성, 보안에 대해 정의
  • 부 스키마 → 물리적 저장 장치 관점 DB 구조
    • 물리적 저장 장치의 관점에서 보는 데이터베이스 구조
    • 실제로 데이터베이스에 저장될 레코드의 형식을 정의하고 저장 데이터 항목의 표현 방법, 내부 레코드의 물리적 순서 등 표현

🤍 CASCADE [23년 2회]

  • 뷰를 제거할 때, 뷰를 참조하는 모든 데이터도 연쇄적으로 제거하는 옵션!
    • 예시
      • <학생> 뷰를 제거한다.

      • <학생> 뷰를 참조하는 모든 데이터도 연쇄적으로 제거한다.

        DROP VIEW 학생 CASCADE;

🤍 RESTRICT

  • 뷰를 제거할 때, 뷰 테이블을 다른 테이블이 참조 중이면 제거하지 않는 옵션!
    • 예시
      • “Soojebi” 뷰 테이블 제거

      • “Soojebi” 뷰 테이블을 다른 테이블이 참조 중이면 제거하지 않음.

        DROP VIEW Soojevi RESTRICT;

🤍 UML 다이어그램 정적 모델링 6가지 = 정(=구) - 클, 객, 컴, 배, 복, 패 [23년 3회]

키워드 : 관계, 구조, 위치 등

  • 적 모델링(=조적 다이어그램)
    • 래스 다이어그램
      • 클래스 사이의 관계를 표현하는 UML을 이용한 정적 모델링의 대표 다이어그램
    • 체 다이어그램
      • 클래스에 속한 사물(객체)들, 즉 인스턴스(Instance)를 특정 시점의 객체와 객체 사이의 관계로 표현
    • 포넌트 다이어그램
      • 실제 구현 모듈인 컴포넌트 간의 관계나 컴포넌트 간의 인터페이스를 표현
    • 치 다이어그램
      • 컴포넌트 사이의 종속성을 표현하고, 결과물, 프로세스, 컴포넌트 등 물리적 요소들의 위치를 표현
    • 합체 구조 다이어그램
      • 클래스나 컴포넌트가 복합 구조를 갖는 경우 그 내부 구조를 표현
    • 키지 다이어그램[23년3회]
      • 유스케이스나 클래스 등의 모델 요소들을 그룹화한 패키지들의 관계를 표현

🤍 UML 다이어그램 동적 모델링 7가지 = 동(=행) - 유, 시, 커, 상, 활, 상, 타 [23년 3회]

키워드 : 요구 분석, 메시지, 상태 변화, 로직, 흐름, 제약 등

  • 적 모델링(위 다이어그램)
    • 스케이스 다이어그램(Use Case Diagram)
      • 사용자의 요구를 분석하는 것으로, 기능 모델링 작업에 사용
      • 사용자(Actor)와 사용 사례(Use Case)로 구성됨
    • 퀀스 다이어그램(Sequence Diagram)
      • 상호 작용하는 시스템이나 객체들이 주고받는 메시지를 표현함
    • 뮤니케이션 다이어그램(Communication Diagram)
      • 동작에 참여하는 객체들이 주고받는 메시지와 객체들 간의 연관 관계를 표현함
    • 태 다이어그램(State Diagram)
      • 하나의 객체가 자신이 속한 클래스의 상태 변화 혹은 다른 객체와의 상호 작용에 따라 상태가 어떻게 변화하는지를 표현함
      • 럼바우 객체지향 분석 기법에서 동적 모델링에 활용됨
    • 동 다이어그램(Activity Diagram)
      • 시스템이 어떤 기능을 수행하는지 객체의 처리 로직이나 조건에 따른 처리의 흐름을 순서에 따라 표현함
    • 호작용 개요 다이어그램(Interaction Overview Diagram)
      • 상호작용 다이어그램 간의 제어 흐름을 표현함
    • 이밍 다이어그램(Timing Diagram)
      • 객체 상태 변화와 시간 제약을 명시적으로 표현함

🤍 무결성 제약조건 4가지 = 개, 도, 참, 사 [23년 3회]

  • 체 무결성 : 기본키는 null이 될 수 없고 중복이 일어날 수 없음(릴레이션 내에 오직 하나의 값만 존재해야 함), 기본키 제약이라고도 함.
  • 메인 무결성 : 주어진 속성이 도메인에 속해야 함
  • 조 무결성[23년 3회] : 외래키는 참조할 수 없는 값을 가질 수 없음
    • 제한 : 참조무결성의 원칙을 위배하는 연산을 거절하는 옵션이다.
    • 연쇄 : 참조되는 릴레이션에서 튜플을 삭제하고, 참조되는 릴레이션에서 이 튜플을 참조하는 튜플도 함께 삭제하는 옵션이다.
    • 널 값 : 참조되는 릴레이션에서 튜플을 삭제하고, 참조하는 릴레이션에서 해상 튜플을 외래키에 NULL 값을 넣는 옵션이다.
  • 용자 정의 무결성 : 속성값들이 사용자가 정의한 제약조건에 만족해야 함

🤍 키(KEY) 3가지 = 대, 슈, 외

  • 체키 : 후보 키 중에서 기본 키로 선택되지 않은 키
  • 퍼키 : 릴레이션을 구성하는 모든 튜플에 대해 유일성은 만족하지만, 최소성은 만족하지 못하는 키
  • 래키 : 테이블 간의 참조 무결성을 위한 제약 조건으로 한 릴레이션의 컬럼이 다른 릴레이션의 기본 키로 이용되는 키

profile
언젠가 내 코드로 세상에 기여할 수 있도록, BE&Data Science 개발 기록 노트☘️

0개의 댓글