반응형

안녕하세요. 신기한 연구소입니다.

SQL 문장의 종류에 보면 데이터 정의어(DDL)가 있습니다.

해당 용어에 대해 간단히 정리해보겠습니다.

 

오라클 기준으로 설명할께요.

데이터 정의어(DDL)는 테이블에 관련된 명령어입니다.

 

테이블(TABLE)

정리되지 않은 데이터들을 특정 주제와 목적으로 정리해서 만든 집합 개념이라 할 수 있습니다.

행과 열이 존재하는 2차원적 구조이며 흔히 엑셀을 생각하면 쉽게 이해할 수 있습니다.

열(컬럼, 속성)은 더 이상 나눌 수 없는 원자 값을 가질 수 있는 속성을 말합니다.

행은 키가 되는 데이터 그리고 관련된 정보들이 한 줄로 구성되어 있습니다.

 

기본키(Primary key)

테이블에 있는 각 행의 데이터를 명확히 구분 지어 특정할 수 있는 한 개 이상의 컬럼을 말합니다.

우리가 회사의 직원을 구분할 때나 국민으로 사람을 구분할 때 사용할 수 있는데..

회사면 직원코드나 사번일 거고 국민은 주민번호가 기본키가 될 수 있습니다.

이름은 중복(동명)될 수 있지만 사번, 주민번호는 중복될 수 없으니깐요.

기본키가 되면 자동으로 DBMS에서 UNIQUE INDEX를 생성하면서 동시에 NOT NULL도 지정됩니다.

 

외부키(Foreign key)

다른 테이블의 기본키를 가지고 있는 겁니다.

직원 정보 테이블에 부서 코드를 넣을 수 있는데 부서 테이블의 키를 가지고 있는 경우 직원 정보 테이블에서 해당 부서 코드를 외부키로 구성합니다.

 

CREATE TABLE

테이블 생성

새로운 테이블을 생성하는 명령어입니다. 릴레이션을 생성한다고 표현하기도 합니다.

기본 문법은

CREATE TABLE 테이블 명 (

   COULMN1 DATATYPE [DEFALUT TYPE],  -- 컬럼명, 데이터 타입, 속성 설정

   COULMN2 DATATYPE [DEFALUT TYPE],

   ...

   CONSTRAINT [제약조건],

   ...

);

입니다.

사원 정보 테이블을 샘플로 만들어 본다면 다음과 같습니다.

CREATE TABLE EMP (

   EMP_ID CHAR(5) NOT NULL,

   EMP_NM VARCHAR(10) NOT NULL,

   DEPT_ID CHAR(5) NOT NULL,

   BIRTH_DT CHAR(8)

   CONSTRAINT EMP_PK PRIMARY KEY(EMP_ID),  --EMP_ID를 기본키로 설정

   CONSTRAINT EMP_FK FOREIGN KEY(DEPT_ID) REFERENCES DEPT(DEPT_ID) 

        --DEPT테이블의 DEPT_ID를  외래키로 설정

);

컬럼명, 데이터타입, 속성을 필요한 만큼 정의한 뒤 제약조건을 넣어주면 됩니다.

위 구문을 보면 CONSTRAINT가 있는데 제약조건이라고 합니다.

 

제약조건(CONSTRAINT)

PRIMARY KEY, UNIQUE KEY, FOREIGN KEY, NOT NULL, CHECK를 설정합니다.

 

ALTER TABLE

테이블 수정

COLUMN이나 CONSTRAINT를 추가, 삭제할 경우에 사용합니다.

 

ALTER TABLE EMP

ADD (PHONE VARCHAR2(13) NULL DEFAULT "000-0000-0000");

PHONE 컬럼을 추가하는데 타입은 VARCHAR2(13)이고 NULL 허용에 기본값은 "000-0000-0000"입니다.

 

ALTER TABLE EMP

MODIFY(PHONE VARCHAR2(13) NOT NULL DEFALUT "XXX-XXXX-XXXX");

PHONE 컬럼을 수정합니다. NULL에서 NOT NULL로 DEFAULT 값도 "XXX-XXXX-XXXX"로 변경했습니다.

ALTER TABLE EMP

DROP COLUNM PHONE;

PHONE컬럼만 삭제합니다.

 

ALTER TABLE EMP

RENAME COLUMN PHONE TO CELL_PHONE;

PHONE 컬럼명을 CELL_PHONE으로 변경합니다.

 

ALTER TABLE EMP

DROP CONSTRAINT EMP_FK;

EMP 테이블의 FK 제약조건을 삭제합니다.

 

ALTER TABLE EMP

ADD CONSTRAINT EMP_FK FOREIGN KEY (DEPT_ID) REFERENCES DEPT(DEPT_ID);

EMP테이블에 FK(DEPT_ID) 제약조건을 추가합니다.

 

RENAME  테이블명 수정

RENAME EMP TO SAWON;

EMP 테이블 명을 SAWON으로 수정합니다.

 

DROP TABLE

테이블의 모든 데이터와 테이블 자체를 삭제

DROP TABLE EMP [CASCADE | RESTRICT];

DROP 명령을 사용하면 해당 테이블의 존재 자체가 사라진다고 보면 됩니다.

 

TRUNCATE TABLE

테이블의 모든 행만 삭제하고 테이블 구조는 살아있음.

TRUNCATE TABLE EMP;   

주의할 점은 시스템 부하가 DELETE에 비해 적은데 복구가 불가능하기에 유의해서 사용해야 합니다.

 

기타

NULL은 '', "", 0, 조회값없음 등과 전혀 다른 값입니다. 아직 할당이 안되었다로 보면 됩니다.

DEFAULT는 INSERT로 데이터를 입력할 때 아무런 값도 입력하지 않아도 기본적으로 셋팅할 수 있는 명령어입니다. DEFAULT "Y"로 하면 값을 입력하지 않을 시 해당 필드는 "Y"가 자동 입력됩니다.

 

개발하면서 도움이 되길 바랍니다.

잘못된 정보가 있으면 댓글 주세요. 감사합니다.

 

반응형
반응형

안녕하세요. 신기한 연구소입니다.

 

데이터 모델링에 대한 용어들이 많은데요.

특히 같은 의미인 듯한데 다른 용어를 사용하는 거 같기도 하고

혼동되는 경향이 있더군요.

용어를 쉽게 이해할 수 있게 표현해봤는데 처음 접하는 분들에게 도움이 되길 바라는 마음에

최대한 이해하기 쉽게 설명했습니다.

 

 

 

엔터티(Entity)

업무적으로 분석을 하면 그룹을 선정할 수 있습니다.

임직원, 제품, 계약, 법인카드, 계좌, 거래처 등등..

이렇게 업무 분석 중 도출되는 개체들을 엔터티(Entity)라고 합니다.

 

릴레이션R

관계형 데이터 모델을 구성할 때 사용하는 용어인데

릴레이션R 스키마(Scheme) 과 릴레이션R 인스턴스로 구분할 수 있습니다.

릴레이션R은 애트리뷰트(속성), 튜플, 애트리뷰트값(원자값), 도메인, 인스턴스 용어를 사용합니다.

 

테이블

개념 모델링, 논리 모델링을 거쳐 물리 모델링을 통해 엔터티(릴레이션R)를 기반으로 실제 물리적인 데이터를 저장하는 공간을 테이블이라고 합니다.

 

엔터티(Entity), 릴레이션R, 테이블 관계

개념 모델링 시 추출한 개체를 엔터티라 부르고,

논리 모델링을 통해 물리 모델링으로 엔터티를 테이블로 구성하고

테이블을 관계형 데이터 모델로 정의할 때는 릴레이션R이라고 합니다.

어떻게 보면 셋 다 같은 듯 보이지만,

보통은 개념/논리에서 도출된 엔터티(Entity)를 변환해서 물리의 테이블을 만듭니다.

하지만, 성능 등을 고려해 정규화 또는 비정규화를 통해 물리적인 구성은 변환할 수 있습니다.

그래서 엔터티 그대로 테이블이 되지 않는 경우도 있습니다.

예를 들면 슈퍼/서브타입의 경우가 있답니다.

 

릴레이션R은 조건과 상황에 따라 반드시 테이블과 일치하는 건 아닙니다.

예를 들어서, 애트리뷰트 값에 원자값이 아닌 값이 들어갈 수 있다면 (한 컬럼에 값이 2개, “남, 28세”)

이 컬럼을 갖는 테이블을 만들 수는 있지만 릴레이션R의 정의에 맞지 않습니다.

 

결론은,

개발자가 개발할 때 SQL문에서 사용하는 from 절의 테이블 명은 물리 모델링에서 산출된 테이블이고,

그 테이블을 만들기 위해 설계 시 나온 테이블의 개념적, 논리적 산출물이 엔터티(Entity)이며

그 테이블을 관계형 데이터 모델에서는 릴레이션R이라고 합니다.

 

깁스냐, 캐스팅이냐, 석고냐 같은 듯 다르게 부르는 거라고 보시면 되겠네요. ㅎㅎㅎ

 

결국 개념적 엔터티와 관계형 릴레이션R은 잘 구성되고 최적의 성능을 낼 수 있는 물리적 테이블을 위해 필요한 과정의 산물이라 보면 되겠습니다.

 

애트리뷰트(속성, Attribute)

테이블의 열과 같은 의미이며 도메인 위에 정의된다고 보시면 됩니다.

개발자들은 컬럼명으로 익숙하겠네요.

 

도메인(Domain)

애트리뷰트(속성, Attribute) 값의 범위입니다.

값의 타입과 크기(Char(3), Integer…)의 설정입니다.

성별이라는 컬럼이 있다면 “남/여” 또는 코드값으로 “0/1”등으로 값을 범위를 정하고 char(1)로 타입과 사이즈를 지정하는 것을 도메인(Domain)이라고 합니다.

 

릴레이션R 스키마

릴레이션R 이름(테이블명)과 애트리뷰트(속성)를 릴레이션R 스키마라고 합니다.

개발자가 보는 테이블 명세서/정의서로 이해하면 되겠네요.

 

릴레이션R 인스턴스

테이블을 만들면 해당 컬럼들에 값이 채워집니다.

개발자는 select * from A; 로 검색하면 해당 테이블의 전체 데이터가 나오는데

그 전체 데이터를 인스턴스라고 합니다. 튜플의 집합이라고도 합니다.

 

릴레이션R 스키마와 릴레이션R 인스턴스를 인스턴스R이라고 합니다.

 

튜플/투플

관계형 데이터 모델에서 부르는 (릴레이션R) 인스턴스와 같은 의미로

테이블의 모든 행(데이터)을 말합니다.

 

차수

릴레이션R의 애트리뷰트(속성)의 개수입니다.

테이블의 컬럼 개수로 이해하시면 편합니다.

이 테이블에 컬럼이 5개 있다 = 5차 릴레이션R

 

카디널리티(카디날리티, Cardinality)

튜플의 수입니다.

개발자 분들은 select count(*) form A; 로 얻는 전체 행의 수입니다.

직원 테이블에 직원 10명의 정보가 있다면

카디널리티는 10입니다.

 

데이터 모델링의 3단계

 

개념적 데이터 모델링

업무를 분석하면서 엔터티를 정의하고,

관계를 정의하고,

키를 설정하는 등의 작업을 하는 모델링.

 

논리적 데이터 모델링

상세화 작업을 하는데 정규화도 진행한다.

식별자와 속성을 정의한다.

엔터티 상세화 작업 및 관계 등 작업을 한다.

ERD를 보면 한글명으로 되어 있는데..

분석 설계를 업무 중심으로 논리적으로 진행하므로

현지 언어로 표현하면 쉽게 이해할 수 있겠지요?

 

물리적 데이터 모델링

물리적 저장소 설계 및 테이블, 인덱스, 제약조건 등을 생성합니다.

실제 SQL문에서 사용할 테이블 명과 컬럼명이라

ERD에서 물리 설계는 정의된 영어/영어 약자 등으로 되어 있습니다.

 

잘못된 정보나 수정할 부분이 있으면 댓글 주세요. 

감사합니다.

반응형