너굴 개발 일지

TIL_210408_데이터&데이터베이스, 관계형 데이터베이스, 릴레이션,키 본문

DataBase

TIL_210408_데이터&데이터베이스, 관계형 데이터베이스, 릴레이션,키

너굴냥 2021. 4. 8. 23:37

목차

- 데이터

- 일시적 데이터, 영구적 데이터

- 정보

- 지식

- 데이터베이스

- DBMS, DBMS의 기능

- 데이터 모델, 관계형 데이터 모델

- 릴레이션 (속성, 튜플, 도메인, null)

- 테이블 특성

- 키 (슈퍼키, 후보키, 기본키, 외래키)

 

 

데이터

실세계의 실체를 묘사하는 값으로 일시적 데이터와 영구적 데이터로 나뉜다

 

일시적 데이터

 해당 프로세스가 실행되는 동안만 일시적으로 존재(휘발성), 예 : 프로그램의 변수

 

영구적 데이터

어떤 프로세스의 생명주기에 종속적이지 않고 스스로 존재(비휘발성), 예 : 컴퓨터에 있는 엑셀 파일

 

정보

데이터들로부터 유도될 수 있는 유추된 사실들 

 

지식

데이터, 지식보다 상위 개념으로 데이터, 정보들을 통해 이들을 처리하는 방법 혹은 추론을 통한 법칙 

 

 

 

데이터베이스

관련된 데이터의 모음 또는 집합으로 예를 들면 주소록,계약서 서류들을 분리해 보관하는 캐비닛을 보면 주소록과 계약서 각각 하나의 데이터베이스를 구성한다

 

DBMS

Database Management System의 약자로 응용 프로그램과 데이터베이스중재자 역할을 한다

창고로 예를 들면 창고를 이용하는 직원이 응용 프로그램, 물건이 데이터, 물건을 보관하는 창고가 데이터베이스가 되며 창고의 물건들을 적재적소에 관리하는 창고관리인을 DBMS로 볼 수 있다

 

 

창고와 DBMS의 관계

 

DBMS의 관계도를 그림으로 나타냈다

 

DBMS의 제공 기능 

1. 정보를 관리할 수 있는 양식으로 다양한 정보의 표현이 가능함

2. 데이터 공유 기능

3. 데이터 무결성 유지 (데이터가 얼마나 정확한지를 뜻함)

4. 데이터 독립성 (응용 프로그램 & 데이터간의 독립성, 우리가 자바로 오라클 db를 사용하지만 데이터가 db 어디에

저장되었는지는 모른다)

5. 효율적인 자원 관리 가능

6. 데이터 보안성, 안정성 유지 

 


데이터 모델

현실세계를 단순화, 정형화된 형태로 표현하는 하나의 방식으로 실제 데이터가 갖는 특성을 살리면서, 목적에 맞게 관심있는 정보만을 단순화하여 표현하는 방식

 

관계형 데이터 모델 

테이블 형식의 데이터 모델로, 데이터를 직관적으로 이해하게끔 간단한 방식을 제공하며 

테이블릴레이션(relation)이라 부른다 

 

릴레이션 - 속성 (필드, 컬럼)

릴레이션을 구성하는 각 열의 이름, 예 : 주소록 릴레이션 속성 - 이름, 전화번호, 주소

 

릴레이션 - 튜플 (레코드, 행)

릴레이션의 각 행, 예 : 주소록 릴레이션의 한 튜플 - ('홍길동', 512-1123, '서울 강남구')

 

 

테이블,필드,레코드 용어를 더 자주 쓴다

 

릴레이션 - 도메인 (domain)

각 필드에 입력 가능한 값들의 범위로 원자값( 더이상 분리되지 않는 값)이어야 한다

예 : 주소록의 도메인 - 이름 => 개인의 이름들로 구성된 문자열 집합

                           - 주소 => 도시를 나타내는 문자열의 집합

                           - 전화번호 => "000-000-0000"의 형식으로 구성된 문자열의 집합

 

릴레이션 - 널(null)

특정 필드에 대한 값을 알지 못하거나 아직 정해지지 않아 입력하지 못한 경우의 필드의 값

(0이나 공백 문자와는 다르다)

 

 

테이블의 특성

- 중복된 레코드가 존재하지 않음 (테이블 인스턴스는 레코드들의 "집합")

- 레코드간의 순서는 의미가 없음 (첫번째 레코드, 두번째 레코드란 표현은 의미 없음)

- 레코드 내에서 필드의 순서는 의미가 없음 (첫번째 필드, 두번째 필드란 표현은 의미 없음)

 

- 레코드간의 순서가 의미가 없으므로 레코드를 구분하기 위해서는 각 레코드의 값을 이용함

- 필드들의 일부로 각 레코드들을 유일하게 식별해낼 수 있는 식별자 

  (필드에 들어가는 데이터들의 중복을 금지하기 위한 수단인셈)

예 : 주민번호, 회사 사원번호 / 하지만 키, 몸무게 이런건 키 설정 X

- 관계형 데이터 모델에서 특정 레코드를 구별하거나 탐색하기 위한 유일한 방법

 

슈퍼키

- 레코드를 유일하게 식별할 수 있는 하나의 속성 혹은 속성의 집합

예 : 고객 릴레이션 - 고객번호, 이름, 주민번호, 주소 가 있을 때 

      고객 번호 , 주민번호를 포함한 모든 속성의 집합이 슈퍼키가 된다. 

  => (고객번호, 이름) , (고객번호, 이름, 주소) ...

  => (주민번호, 이름) , (주민번호, 이름, 주소)....

 

후보키

- 레코드를 유일하게 식별할 수 있는 속성의 최소 집합

예 : 위의 고객 릴레이션을 보면 슈퍼키는 많지만 후보키는 => 고객번호, 주민번호만 될 수 있다

 

기본키(primary key)

- 여러 후보키 중 하나를 선정하여 대표로 삼는 키, 예 : 고객 릴레이션 - 고객번호 혹은 주민번호 

- 단일 테이블, 다중 테이블에서 사용되는 기본키

- 제약조건 NOT NULL, UNIQUE을 포함하여 기본키로 지정된 필드의 데이터 값은 중복 허용 X, null값 X

 

외래키 (foreign key)

- 다른 테이블의 기본키참조하는 필드 집합으로 기본키로 지정된 필드의 데이터만 사용할 수 있으며 다른 값은 삽입될 수 없다. 하지만 null값은 허용한다

- 기본키를 지정한 필드의 테이블을 생성한 후 외래키를 지정한 필드의 테이블을 생성하는 순서이기에, 삭제시에는 외래키 지정된 필드 테이블부터 삭제해야 한다. (기본키 테이블부터 삭제 X, 외래키가 기본키를 사용하고 있기 때문이다)

 

 

외래키와 기본키의 차이 

 

키 삽입 및 확인 방법 

1) 테이블 생성시 - 컬럼 레벨에서 작성 ( 제약조건명 없이 )

create table customer (
name varchar2(20) PRIMARY KEY,
email varchar2(50) REFERENCES product, <= 원래는 참조되는 테이블명(컬럼명) 쓰지만 컬럼명 생략 가능
phone varcahar2(10));

컬럼레벨에서 작성 (제약조건명 같이)

create table customer (
name varchar2(20) CONSTRAINTS name_pk PRIMARY KEY,
email varchar2(50) CONSTRAINTS email_fk REFERENCES product,
phone varcahar2(10));

2) 테이블 생성시 - 테이블 레벨에서 작성 (제약조건명 없이)

create table customer (
name varchar2(20),
email varchar2(50),
phone varcahar2(10),
PRIMARY  KEY(name),
FOREIGN KEY(phone) REFERENCES product(product_no)
);

 

create table customer (
name varchar2(20),
email varchar2(50),
phone varcahar2(10),
CONSTRAINT name_pk PRIMARY  KEY(name),
CONSTRAINT phone_fk FOREIGN KEY(phone) REFERENCES product(product_no)
);

3) 제약사항 확인 방법

USER_CONS_COLUMNS  :   컬럼에 할당된 제약 조건 조회
USER_CONSTRAINTS       :    유저가 소유한 모든 제약 조건 조회

SELECT * FROM USER_CONSTRAINTS;