본문 바로가기

SQL

231128 Oracle

오라클 데이터베이스에서는 스키마와 사용자를 구별하지 않고 사용하기도 함

 

사용자 생성

CREATE USER [사용자 생성(필수)]
IDENTIFIED BY [패스워드(필수)]
DEFAULT TABLESPACE [테이블 스페이스 이름]
TEMPORARY TABLESPACE [테이블 스페이스(그룹) 이름]
QUOTA [테이블 스페이스 크기] ON [테이블 스페이스 이름]
PROFILE [프로파일 이름]
[PASSWORD EXPIRE]
ACCOUNT [LOCK/UNLOCK];

 

SCOTT 계정으로 사용자 생성하기

CREATE USER ORCLSTUDY
IDENTIFIED BY ORACLE; -- 사용자 이름은 ORCLSTUDY / 비밀번호는 ORACLE

 

새로 생성한 사용자 로그인

CMD 창에서 로그인

SQLPLUS ORCLSTUDY/ORACLE
ERROR:
ORA-01045: user ORCLSTUDY lacks CREATE SESSION privilege; logon denied
-- 첫 로그인 시 권한이 없어 로그인 실패

 

로그인 권한 부여하기

GRANT CREATE SESSION TO ORCLSTUDY; -- ORCLSTUDY 사용자에게 세션 생성 권한 부여

 

나의 테이블 확인하기

SELECT * FROM TAB;

 

비밀번호 변경하기

ALTER USER ORCLSTUDY
IDENTIFIED BY orcl; -- ORCLSTUDY 본인과 SYSTEM 유저가 변경 가능

 

유저 삭제 / 유저와 객체 모두 삭제하기

DROP USER ORCLSTUDY; -- 유저 삭제하기
DROP USER ORCLSTUDY CASCADE; -- 유저와 객체 모두 삭제

 

권한 관리

오라클에서는 권한을 시스템 권한과 객체 권한으로 분류

 

시스템 권한 - 데이터베이스 관리 권한이 있는 사용자가 부여할 수 있는 권한

객체 권한 - 특정 사용자가 생성한 테이블, 인덱스, 뷰, 시퀀스 등과 관련된 권한

 

CREATE USER -- 사용자 생성 권한
ALTER USER -- 생성된 사용자의 정보 수정 권한
DROP USER -- 생성된 사용자의 삭제 권한

CREATE SESSION -- 데이터베이스 접속 권한
ALTER SESSION -- 데이터베이스 접속 상태에서 환경 값 변경 권한

CREATE TABLE -- 자신의 테이블 생성 권한
CREATE ANY TABLE -- 임의의 스키마 소유 테이블 생성 권한
ALTER ANY TABLE -- 임의의 스키마 소유 테이블 수정 권한
DROP ANY TABLE -- 임의의 스키마 소유 테이블 삭제 권한
INSERT ANY TABLE -- 임의의 스키마 소유 테이블 데이터 삽입 권한
UPDATE ANY TABLE -- 임의의 스키마 소유 테이블 데이터 수정 권한
DELETE ANY TABLE -- 임의의 스키마 소유 테이블 데이터 삭제 권한
SELECT ANY TABLE -- 임의의 스키마 소유 테이블 데이터 조회 권한

CREATE ANY INDEX -- 임의의 스키마 소유 테이블의 인덱스 생성 권한
ALTER ANY INDEX -- 임의의 스키마 소유 테이블 인덱스 생성 권한
DROP ANY INDEX -- 임의의 스키마 소유 테이블 인덱스 삭제 권한

VIEW ... -- 뷰와 관련된 여러 권한
SEQUENCE ... -- 시퀀스와 관련된 여러 권한
SYNONYM ... -- 동의어와 관련된 여러 권한
PROFILE ... -- 사용자 접속 조건 지정과 관련된 여러 권한
ROLE ... -- 권한을 묶은 그룹과 관련된 여러 권한

등 여러가지 권한이 있음

 

시스템 권한 부여 / DDL

GRANT [시스템 권한] TO [사용자 이름/롤(ROLE) 이름/PUBLIC]
[WITH ADMIN OPTION];

 

시스템 권한 취소

REVOKE [시스템 권한] FROM [사용자 이름/롤(ROLE) 이름/PUBLIC];

 

객체 권한 부여 / DML

GRANT [객체 권한/ALL PRIVILEGES]
ON [스키마.객체 이름]
TO [사용자 이름/롤(ROLE) 이름/PUBLIC]
[WITH GRANT OPTION];

 

ORCLSTUDY 유저에게 SCOTT 유저의 EMP 테이블 권한 부여하기

GRANT SELECT, INSERT ON EMP
TO ORCLSTUDY; -- ORCLSTUDY 유저에게 EMP 테이블을 조회, 삽입할 수 있는 권한 부여

SYSTEM or SCOTT 유저로 로그인하여 권한 부여해야 함

 

ORCLSTUDY 유저로 SCOTT 유저의 EMP 테이블 조회하기

SELECT * FROM SCOTT.EMP; -- USER.TABLE 같이 
-- 어떤 유저의 어떤 테이블인지를 명시해야 확실한 조회 가능

 

ORCLSTUDY 유저로 EMP 테이블에 값 삽입하기

INSERT INTO SCOTT.EMP (EMPNO, ENAME)
VALUES (7778, '홍길동');

 

객체 권한 취소하기

REVOKE [객체 권한/ALL PRIVILEGES] -- 필수
ON [스키마.객체 이름] -- 필수
FROM [사용자 이름/롤(ROLE) 이름/PUBLIC] -- 필수
[CASCADE CONSTRAINTS/FORCE]; -- 선택

 

ORCLSTUDY에 부여된 EMP 권한 취소하기

REVOKE SELECT, INSERT
ON EMP
FROM ORCLSTUDY;

 

롤 (ROLE)

롤은 여러 종류의 권한을 묶어 놓은 그룹

롤을 사용하면 여러 권한을 한 번에 부여하고 해제할 수 있어 권한 관리 효율을 높일 수 있다

 

롤에는 기본으로 제공되는 사전 정의 롤과 사용자 정의 롤이 있음

 

SYSTEM 계정으로 ROLESTUDY 롤 생성 및 권한 부여하기

CONN SYSTEM/orcl

CREATE ROLE ROLESTUDY; -- ROLESTUDY 롤 생성

GRANT CONNECT, RESOURCE, CREATE VIEW, CREATE SESSION
TO ROLESTUDY; -- CONNECT, RESOURCE, CREATE VIEW, CREATE SESSION 권한을 ROLESTUDY에 넣음

 

ROLESTUDY 롤을 ORCLSTUDY 유저에게 부여하기

GRANT ROLESTUDY TO ORCLSTUDY;

 

부여한 롤 권한 취소

REVOKE ROLESTUDY FROM ORCLSTUDY;

 

롤 삭제하기

DROP ROLE ROLESTUDY;

 

Natural Join / 내추럴 조인

내추럴 조인은 등가 조인을 대신에 사용할 수 있는 조인 방식

조인 대상이 되는 두 테이블에 이름과 자료형이 같은 열을 찾아 그 기준으로 등가 조인을 해주는 방식

 

NATURAL JOIN 을 사용하여 조인하기

SELECT E.EMPNO, E.ENAME, E.JOB, DEPTNO, D.LOC
FROM EMP E NATURAL JOIN DEPT D;

NATURAL JOIN 은 기준 열에 테이블 이름을 붙이면 안됨

 

JOIN - USING 문법

SELECT E.EMPNO, E.ENAME, E.JOB, DEPTNO, D.LOC
FROM EMP E JOIN DEPT D USING (DEPTNO);

EMP 와 DEPT 를 JOIN 을 하는데 (DEPTNO) 를 사용, USING 하겠다

 

JOIN - ON 문법

SELECT E.EMPNO, E.ENAME, E.JOB, E.DEPTNO, D.LOC
FROM EMP E JOIN DEPT D ON (E.DEPTNO = D.DEPTNO);

기존 WHERE 에서 사용했던 문법을 ON 다음 괄호 안에 작성
다른 JOIN 문법과는 다르게 SELECT 절에서는 사용하고 싶은 테이블의 column 이름까지 작성

 

OUTER JOIN / 외부 조인

LEFT JOIN
WHERE TABLE1.COL1 = TABLE2.COL1(+) -- 기존
FROM TABLE1 LEFT OUTER JOIN TABLE2 ON [조인 조건식]

RIGHT JOIN
WHERE TABLE1.COL1(+) = TABLE2.COL1 -- 기존
FROM TABLE1 RIGHT OUTER JOIN TABLE2 ON [조인 조건식]

FULL JOIN
-- 기본 문법 없음 [UNION 연산자 활용]
FROM TABLE1 FULL OUTER JOIN TABLE2 ON [조인 조건식]

 

EMP 테이블의 MGR 값에 맞는 ENAME 값 출력하기 -- MGR 값이 NULL 이여도 출력

SELECT E1.EMPNO, E1.ENAME, E1.MGR, E2.ENAME
FROM EMP E1 LEFT OUTER JOIN EMP E2
ON (E1.MGR = E2.EMPNO);

 

조인 방식에서 세 개 이상의 테이블 조인하기

기존 조인 방식
FROM TABLE1, TABLE2, TABLE3
WHERE TABLE1.COL = TABLE2.COL
AND TABLE2.COL = TABLE3.COL

SQL - 99 방식
FROM TABLE1 JOIN TABLE2 [조건]
	    JOIN TABLE3 [조건]

 

JOIN - USING 을 사용한 등가 조인 예시

조건 1. EMP 테이블과 DEPT 테이블의 조인 조건은 부서 번호가 같을 때

조건 2. 급여는 3,000 이상이며 직속상관이 반드시 있을 경우

SELECT E.EMPNO, E.ENAME, E.JOB, E.MGR,
E.HIREDATE, E.SAL, DEPTNO, D.LOC
FROM EMP E JOIN DEPT D USING (DEPTNO)
WHERE E.SAL >= 3000
AND E.MGR IS NOT NULL;

 

2,000 을 초과하는 사원 정보, 부서 정보 출력하기

SELECT DEPTNO, D.DNAME, E.EMPNO, E.ENAME, E.SAL
FROM EMP E JOIN DEPT D USING (DEPTNO)
WHERE E.SAL > 2000
ORDER BY DEPTNO;

SELECT E.DEPTNO, D.DNAME, E.EMPNO, E.ENAME, E.SAL
FROM EMP E JOIN DEPT D ON (E.DEPTNO = D.DEPTNO)
WHERE SAL > 2000
ORDER BY E.DEPTNO;

SELECT DEPTNO, D.DNAME, E.EMPNO, E.ENAME, E.SAL
FROM EMP E NATURAL JOIN DEPT D
WHERE SAL > 2000
ORDER BY DEPTNO;

 

부서 별 급여와 사원 수 출력하기

SELECT E.DEPTNO, D.DNAME, TRUNC(AVG(E.SAL)), MAX(E.SAL),
MIN(E.SAL), COUNT(*)
FROM EMP E JOIN DEPT D ON (E.DEPTNO = D.DEPTNO)
GROUP BY E.DEPTNO, D.DNAME;

SELECT DEPTNO, D.DNAME, TRUNC(AVG(E.SAL)), MAX(E.SAL),
MIN(E.SAL), COUNT(*)
FROM EMP E JOIN DEPT D USING (DEPTNO)
GROUP BY DEPTNO, D.DNAME;

SELECT DEPTNO, D.DNAME, TRUNC(AVG(E.SAL)), MAX(E.SAL),
MIN(E.SAL), COUNT(*)
FROM EMP E NATURAL JOIN DEPT D
GROUP BY DEPTNO, D.DNAME;

 

해당 madang 계정을 만들어서 실습

-- 이름: demo_madang.sql
-- 설명
-- madang 스키마를 생성하고 MADANG 서점 실습테이블과 데이터를 입력한다.
-- 본스크립트는 system 계정에서 실행해야한다.
---
-- SQLPlus 실행방법
-- SQL>@demo_madang.sql
-- SQL Developer F5 스크립터 실행


DROP USER madang CASCADE;

CREATE USER madang IDENTIFIED BY madang
DEFAULT TABLESPACE users 
TEMPORARY TABLESPACE temp 
PROFILE DEFAULT;

GRANT CONNECT, RESOURCE TO madang;

GRANT CREATE VIEW, CREATE SYNONYM TO madang;

ALTER USER madang ACCOUNT UNLOCK;

conn madang/madang;

CREATE TABLE Book (
  bookid      NUMBER(2) PRIMARY KEY,
  bookname    VARCHAR2(40),
  publisher   VARCHAR2(40),
  price       NUMBER(8)
);

CREATE TABLE  Customer (
  custid      NUMBER(2) PRIMARY KEY,  
  name        VARCHAR2(40),
  address     VARCHAR2(50),
  phone       VARCHAR2(20)
);


CREATE TABLE Orders (
  orderid NUMBER(2) PRIMARY KEY,
  custid  NUMBER(2) REFERENCES Customer(custid),
  bookid  NUMBER(2) REFERENCES Book(bookid),
  saleprice NUMBER(8) ,
  orderdate DATE
);
-- Book, Customer, Orders 데이터 생성
INSERT INTO Book VALUES(1, '축구의 역사', '굿스포츠', 7000);
INSERT INTO Book VALUES(2, '축구아는 여자', '나무수', 13000);
INSERT INTO Book VALUES(3, '축구의 이해', '대한미디어', 22000);
INSERT INTO Book VALUES(4, '골프 바이블', '대한미디어', 35000);
INSERT INTO Book VALUES(5, '피겨 교본', '굿스포츠', 8000);
INSERT INTO Book VALUES(6, '역도 단계별기술', '굿스포츠', 6000);
INSERT INTO Book VALUES(7, '야구의 추억', '이상미디어', 20000);
INSERT INTO Book VALUES(8, '야구를 부탁해', '이상미디어', 13000);
INSERT INTO Book VALUES(9, '올림픽 이야기', '삼성당', 7500);
INSERT INTO Book VALUES(10, 'Olympic Champions', 'Pearson', 13000);

INSERT INTO Customer VALUES (1, '박지성', '영국 맨체스타', '000-5000-0001');
INSERT INTO Customer VALUES (2, '김연아', '대한민국 서울', '000-6000-0001');  
INSERT INTO Customer VALUES (3, '장미란', '대한민국 강원도', '000-7000-0001');
INSERT INTO Customer VALUES (4, '추신수', '미국 클리블랜드', '000-8000-0001');
INSERT INTO Customer VALUES (5, '박세리', '대한민국 대전',  NULL);

-- 주문(Orders) 테이블의 책값은 할인 판매를 가정함
INSERT INTO Orders VALUES (1, 1, 1, 6000, TO_DATE('2014-07-01','yyyy-mm-dd'));
INSERT INTO Orders VALUES (2, 1, 3, 21000, TO_DATE('2014-07-03','yyyy-mm-dd'));
INSERT INTO Orders VALUES (3, 2, 5, 8000, TO_DATE('2014-07-03','yyyy-mm-dd'));
INSERT INTO Orders VALUES (4, 3, 6, 6000, TO_DATE('2014-07-04','yyyy-mm-dd'));
INSERT INTO Orders VALUES (5, 4, 7, 20000, TO_DATE('2014-07-05','yyyy-mm-dd'));
INSERT INTO Orders VALUES (6, 1, 2, 12000, TO_DATE('2014-07-07','yyyy-mm-dd'));
INSERT INTO Orders VALUES (7, 4, 8, 13000, TO_DATE( '2014-07-07','yyyy-mm-dd'));
INSERT INTO Orders VALUES (8, 3, 10, 12000, TO_DATE('2014-07-08','yyyy-mm-dd'));
INSERT INTO Orders VALUES (9, 2, 10, 7000, TO_DATE('2014-07-09','yyyy-mm-dd'));
INSERT INTO Orders VALUES (10, 3, 8, 13000, TO_DATE('2014-07-10','yyyy-mm-dd'));

-- 여기는 3장에서 사용되는 Imported_book 테이블

CREATE TABLE Imported_Book (
  bookid      NUMBER ,
  bookname    VARCHAR(40),
  publisher   VARCHAR(40),
  price       NUMBER(8)
);
INSERT INTO Imported_Book VALUES(21, 'Zen Golf', 'Pearson', 12000);
INSERT INTO Imported_Book VALUES(22, 'Soccer Skills', 'Human Kinetics', 15000);

COMMIT;

 

박지성이 구매한 책 정보 출력하기

SELECT *
FROM BOOK B JOIN ORDERS O USING (BOOKID)
            JOIN CUSTOMER C USING (CUSTID)
WHERE C.NAME = '박지성';

SELECT *
FROM BOOK B JOIN ORDERS O ON (B.BOOKID = O.BOOKID)
            JOIN CUSTOMER C ON (C.CUSTID = O.CUSTID)
WHERE C.NAME = '박지성';


가격이 20,000 원 이상인 책 정보 출력

SELECT * FROM BOOK
WHERE PRICE >= 20000;

 

데이터베이스 설계

 

데이터베이스 설계 단계에는 여러가지 단계가 있음

 

1. 요구 사항 분석 / 데이터베이스의 용도 파악

현실 세계의 대상 및 사용자의 요구 등을 정리 및 분석

주요 작업 : 데이터베이스를 실제로 사용할 주요 사용자의 범위를 결정

사용자가 조직에서 수행하는 업무를 분석

면담, 설문 조사, 업무 관련 문서 분석 등의 방법을 이용해 요구 사항 수집

수집된 요구 사항에 대한 분석 결과를 요구 사항 명세서로 작성

- 결과물 : 요구 사항 명세서

 

2. 개념적 설계 / DBMS에 독립적인 개념적 구조 설계

중요 개념을 구분, 핵심 개체 도출, ERD 작성

주요 작업 : 요구 사항 분석 결과를 기반으로 중요한 개체를 추출하고 개체 간의 관계를 결정하여 E-R 다이어그램으로 표현

 

개체 : 저장할 만한 가치가 있는 중요 데이터를 가진 사람이나 사물 등

ex) 병원 데이터베이스 개발에 필요한 개체

● 병원 운영에 필요한 사람 : 환자, 의사, 간호사 등

● 병원 운영에 필요한 사물 : 병실, 수술실, 의료 장비 등

 

개체 추출 방법

요구 사항 문장에서 업무와 관련이 깊은 의미 있는 명사를 찾아야 함

● 업무와 관련이 적은 일반적이고 광범위한 의미의 명사는 제외

● 의미가 같은 명사가 여러 개일 경우는 대표 명사 하나만 선택

● 찾아낸 명사를 개체와 속성으로 분류

회원가입을 위해서 필요한 예시

추출 결과

● 개체 : 회원

● '회원' 개체의 속성 : 아이디, 비밀번호, 이름, 나이, 직업, 등급, 적립금 등

● '회원' 개체의 키 속성 : 아이디

 

회원의 E-R 다이어그램 예시

관계 추출

요구 사항 문장에서 개체 간의 연관성을 의미있게 표현한 동사를 찾아야 함

● 의미가 같은 동사가 여러 개일 경우는 대표 동사 하나만 선택

 

찾아낼 관계에 대해 매핑 카디널리티와 참여 특성을 결정

● 매핑 카디널리티 : 일대일 (1:1), 일대다 (1:n), 다대다 (n:m)

● 참여 특성 : 필수적 참여, 선택적 참여

 

관계 추출 문장의 예시

추출 결과

● 관계 : 주문

● '회원'과 '상품'이 맺는 관계

● '회원'과 '주문'이 맺는 관계

● '회원' 개체는 관계에 선택적으로 참여 / '상품' 개체는 관계에 선택적으로 참여

● '주문' 관계의 속성 : 주문번호, 주문수량, 배송지, 주문일자

개체 별 관계 속성 및 유형의 예시

 

회원, 주문, 상품 간의 관계를 나타낸 E-R 다이어그램

 

상품, 공급, 제조업체 간의 관계를 나타내는 E-R 다이어그램

 

회원이 게시글을 작성하는 관계 ex) 후기 게시판

 

최종적으로 만들어진 개념적 스키마 E-R 다이어그램

 

- 결과물 : 개념적 스키마 (E-R 다이어그램)

 

3. 논리적 설계 / DBMS에 적합한 논리적 구조 설계

개념적 스키마를 논리적 데이터 모델을 이용해 논리적 구조로 표현

 - 논리적 모델링 (데이터 모델링) / 일반적으로 관계 데이터 모델을 많이 사용

각 개념을 구체화, ERD - RDB 모델 사상, 상세 속성 정의, 정규화 등

 

주요 작업 : 개념적 설계 단계의 결과물인 E-R 다이어그램을 릴레이션 스키마로 변환

릴레이션 스키마로 변환 후 속성의 데이터 타입, 길이, NULL 값 허용 여부, 기본 값, 제약조건 등을 세부적으로 결정하고 결과를 문서화

 

E-R 다이어그램을 릴레이션 스키마로 변환하는 규칙

● 규칙 1 : 모든 개체는 릴레이션으로 변환한다

● 규칙 2 : 다대다 (n:m) 관계는 릴레이션으로 변환한다

● 규칙 3 : 일대다 (1:n) 관계는 외래키로 표현한다

● 규칙 4 : 일대일 (1:1) 관계는 외래키로 표현한다

● 규칙 5 : 다중 값 속성은 릴레이션으로 변환한다

※ 변환 규칙을 순서대로 적용하되, 해당하지 않는 규칙은 제외함

 

규칙 1 의 예시

모든 개체는 릴레이션으로 변환한다

E-R 다이어그램을 릴레이션으로 변환한 예시

 

복합 속성의 경우

복합 속성의 경우 개체를 풀어서 변환

 

규칙 2 의 예시

다대다 관계는 릴레이션으로 변환한다

● 관계의 이름 -> 릴레이션 이름

● 관계의 속성 -> 릴레이션의 속성

● 관계에 참여하는 개체를 규칙 1에 따라 릴레이션으로 변환한 후 릴레이션의 기본키를 관계 릴레이션에 포함시켜 외래키로 지정하거나, 외래키들을 조합하여 관계 릴레이션의 기본키로 지정

 

주문에 대한 E-R 다이어그램 / 다대다 (n:m) 관계

 

주문 E-R 다이어그램을 릴레이션으로 변환

 

규칙 3 의 예시

일대다 관계는 외래키로 표현한다

● 일반적인 일대다 관계는 외래키로 표현한다

- 일대다 관계에서 1 측 개체 릴레이션의 기본키를 n 측 개체 릴레이션에 포함시켜 외래키로 지정

● 약한 개체가 참여하는 일대다 관계는 외래키를 포함해서 기본키로 지정

- 약한 개체 : 두 개체가 있을 때 독자적으로 전재할 수 없고, 종속되는 개체를 약한 개체라고 한다. ex) 고객과 계좌

 

제조업체의 제조업체명이 상품의 외래키로 지정

 

약한 개체는 강한 개체에 따라 존재 여부가 결정되어 강한 개체의 기본키를 이용해 식별

좌석은 비행기에 종속되어 있기 때문에 비행기번호를 외래키로 받음

 

규칙 4 의 예시

일대일 관계는 외래키로 표현한다

● 일반적인 일대일 관계는 외래키를 서로 주고받는다

- 관계의 참여하는 개체 릴레이션들이 서로의 기본키를 주고받아 외래키로 지정

- 관계의 속성들도 모든 개체 릴레이션에 포함시킴

- 불필요한 데이터 중복이 발생할 수 있음

혼인 관계의 남여 사이는 서로의 키를 외래키로 받음

 

● 일대일 관계에 필수적으로 참여하는 개체의 릴레이션만 외래키를 받는다

- 관계에 필수적으로 참여하는 개체 릴레이션만 외래키를 포함

- 관계의 속성들은 관계에 필수적으로 참여하는 개체 릴레이션에 포함

필수적으로 참여하는 개체의 릴레이션만 외래키를 가지는 예

 

● 모든 개체가 일대일 관계에 필수적으로 참여하면 릴레이션 하나로 합친다

- 관계에 참여하는 개체 릴레이션들을 하나의 릴레이션으로 합쳐서 표현

- 관계의 이름을 릴레이션 이름으로 사용하고, 관계에 참여하는 두 개체의 속성들을 관계 릴레이션에 모두 포함

- 두 개체 릴레이션의 키 속성을 조합하여 관계 릴레이션의 기본키로 지정

혼인 릴레이션을 만들어 남자와 여자번호를 함께 기본키로 지정

 

규칙 5 의 예시

다중 값 속성은 독립적인 릴레이션으로 변환

● 다중 값 속성과 함께 속성을 가지고 있던 개체 릴레이션의 기본키를 외래키로 가져와 새로운 릴레이션에 포함시킴

● 새로운 릴레이션의 기본키는 다중 값 속성과 외래키를 조합하여 지정

다중 값 속성인 부하직원 속성을 그대로 포함하는 사원 릴레이션, '속성에 다중 값을 저장할 수 없다'는 릴레이션 특성을 위반

 

릴레이션 특성을 위반하지는 않지만 다른 속성의 값이 불필요하게 중복 저장되는 문제 발생

 

릴레이션을 분할하여 불필요한 중복을 제거함과 동시에 릴레이션의 특성을 만족

 

다중 값을 가진 속성을 변환한 릴레이션의 예시

 

- 결과물 : 논리적 스키마(릴레이션 스키마)

릴레이션 규칙에 맞게 만들어진 릴레이션 결과

 

테이블 명세서 작성

● 릴레이션 스키마 변환 후 속성의 데이터 타입, 길이, NULL 값 허용 여부, 기본값, 제약조건 등을 세부적으로 결정하고 문서화

● 테이블 명세서 : 릴레이션 스키마에 대한 설계 정보를 기술한 문서

회원 릴레이션 스키마의 테이블 명세서

 

4. 물리적 설계 / DBMS로 구현 가능한 물리적 구조 설계

데이터베이스 생성 계획에 따라 개체, 인덱스 등을 생성

- 결과물 : 물리적 스키마

 

5. 구현 / SQL 문을 작성한 후 이를 DBMS에서 실행하여 데이터베이스 생성

테이블 명세서에 따라 SQL 문을 작성한 예

'SQL' 카테고리의 다른 글

240202 리눅스 서버 만들어보기  (0) 2024.02.02
231129 Oracle  (1) 2023.11.29
231127 Oracle  (0) 2023.11.27
국비지원학원 3, 4일 차 정리 / ORACLE  (0) 2023.11.26
국비지원학원 1,2일 차 정리 / ORACLE  (0) 2023.11.24