쥬로그

오라클 - 스키마 정의, 자료형, 제약조건 (2) 본문

Study/Oracle

오라클 - 스키마 정의, 자료형, 제약조건 (2)

쥬쥬씨 2021. 8. 31. 17:18
반응형

< 스키마 정의, 자료형, 제약조건 (2) >

* 스키마는 테이믈/DB(데이터베이스)의 구조나 데이터타입을 정의한다.

* 제약 조건은 레코드를 추가할 때 외에도 수정/삭제할 때도 적용된다.


* 자료형 (Data Types)

♧ NUMBER (a, b)

- 숫자를 다루는 데 사용하는 데이터 타입

- number(10, 2) 소수점 기준으로 10자리, 소수점 이하 2자리

- 다른 시스템/언어와의 호환성을 위해 int/float도 허용

 

♧ 문자열

- CHAR (size): 고정 길이 문자열

- VARCHAR2 (size): 가변 길이 문자열

 

♧ Long

- 2GB 이내의 문자열을 처리하는 데이터 타입

 

♧ Date

- 날짜와 관련한 데이터를 저장하는 데이터 타입

 

♧ CLOB (Character Large Object)

- 4GB 이하의 문자열을 저장하는 데이터 터압

 

♧ BLOB (Binary Large Object)

- 4GB 이하의 바이너리 데이터를 저장하는 데이터 타입

 

 

* 스키마 정의

♧ DDL (Data Definition Language)

- 데이터 베이스와 테이블을 CRUD (Create, Retrieve, Update, Delete)

- 테이블에 대한 정보는 메타데이터(MetaDate)로 데이터사전(DataDictionary)에 저장, 관리된다.

 

♧ 데이터베이스(DB) 생성

  CREATE DATABASE 데이터베이스명;

 

♧ 테이블 생성

  CREATE TABLE 테이블명 (컬럼명1 데이터타입(크기), 컬럼명2...);

 

ex) 컬럼으로 이름(Name), 주소(Address), 전화번호(Telephone)를 가지는 BUSINESSCARD 테이블을 정의하고 생성하시오. 단, 이름, 주소, 전화번호는 문자열(varchar2) 최대 길이 255자로 지정함.

-> create table BUSINESSCARD (Name varchar2(255), Address varchar2(255), Telephone varchar2(255));

-> desc BUSINESSCARD; (생성된 테이블의 스키마 보기)

-> insert into BUSINESSCARD values ('Bob', 'Seocho-dong 123', '123-4567'); (레코드 삽입)

-> insert into BUSINESSCARD values ('Tom', 'Sindang-dong 456', '321-4321'); (레코드 삽입)

 

 

* 제약조건 (Constraint)

- 입력 데이터의 제약 조건을 걸어 해당되지 않는 데이터는 입력되지 않음

 

> NOT NULL : 데이터가 NULL 값을 받아들이지 않음

> UNIQUE : 테이블에 동일한 값이 입력되어 있을 경우 받아들이지 않음

> PRIMARY KEY (PK) : 기본키 제약조건 (UNIQUE, NOT NULL 조건)

> FOREIGN KEY (FK) : 외래키 제약조건

> CHECK : 입력값 체크 (ex: Age >= 0)

> DEFAULT : 컬럼값이 입력되지 않으면 기본값을 입력

 

ex) 1. BUSINESSCARD 테이블의 이름(Name)이 NOT NULL로 생성하시오.

-> create table BUSINESSCARD (Name varchar2(255) not null, Address varchar2(255), Telephone varchar2(255));

-> insert into BUSINESSCARD values ('Bob', 'Seocho-dong 123', '123-4567');

-> insert into BUSINESSCARD values (NULL, 'Seocho-dong 123', '123-4567');

    ※ NULL 값은 NOT NULL 제약 조건에 의해 추가 되지 않음

 

ex) 2. BUSINESSCARD 테이블의 Name이 동일한 값이 허용되지 않도록 지정하시오.

-> create table BUSINESSCARD (Name varchar2(255) unique, Address varchar2(255), Telephone varchar2(255));

-> insert into BUSINESSCARD values ('Bob', 'Seocho-dong 123', '123-4567');

-> insert into BUSINESSCARD values ('Bob', 'Seocho-dong 345', '321-4321');

    Bob이 중복되어 UNIQUE 제약 조건에 의해 추가 되지 않음

 

ex) 3. BUSINESSCARD 테이블의 아이디(id)을 기본키로 지정한다.

-> create table BUSINESSCARD (id int not null, name varchar2(255), Address varchar2(255), Telephone varchar2(255), primary key(id));

-> insert into BUSINESSCARD values (1, 'Bob', Seocho-dong 123', '123-4566');

-> insert into BUSINESSCARD values (2, 'Bob', 'Sinsa-dong 456', '789-4561);

-> select * from BUSINESSCARD;

    ※ id 값에 1, 2 또는 NULL을 추가할 경우 not null 제약 조건과 primary key 제약 조건으로 의해 추가 되지 않음

 

ex) 4. Salary 테이블의 business_card_id를 외부키로 지정한다.

-> create table BUSINESSCARD (id int not null, name varchar2(255), Address varchar2(255), Telephone varchar2(255), primary key(id));

-> create table Salary (id number not null, salary_amout number, business_card_id number not null, primary key(od), foreign key(business_card_id) reference BUSINESSCARD(id));

-> insert into BUSINESSCARD values (1. 'Bob', 'Seocho-dong 123', '123-4567');

-> insert into Salary values(1, 5000, 1);

-> select * from BUSINESSCARD;

-> select * from Salary;

 

ex) 5. BUSINESSCARD 테이블의 Age 값은 0 보다 커야한다.

-> create table BUSINESSCARD (Name varchar2(255), Address varchar2(255), Telephone varchar2(255), Age int check(Age > 0));

-> insert into BUSINESSCARD values ('Bob', 'Sinsa-dong 123', '123-4567', 0);

    ※ Age 값이 0 이므로 Check 제약 조건을 위반하여 저장되지 않는다.

 

ex) 6. BUSINESSCARD 테이블의 주소(Address)값이 지정되지 않으면 'SEOUL'로 입력되도록 하시오.

-> create table BUSINESSCARD (Name varchar2(255), Address varchar2(255) default 'SEOUL', Telephone varchar2(255));

-> insert into BUSINESSCARD(name, telephone) values ('Sam', '123-4567-);

-> select * from BUSINESSCARD;

    ※ 이름, 전화번호만 입력했으므로 Default 제약 조건에 의해 주소는 기본값인 seoul이 출력된다.

 

 

* 시퀀스 (Sequence)

♧ 자동 번호 생성기

- 기본키로 사용하기 편하도록 숫자를 정해진 규격에 의해 생성

- 다른 DBMS의 AUTO_INCREMENT 속성에 대응하는 개념

  CREATE SEQUENCE 시퀀스명

  START WITH N

  INCREMENT BY N

 

♧ 시퀀스 조회 함수

  CURRVAL()  ->  현재 시퀀스 값 조회

  NEXTVAL()  ->  새로운 시퀀스 값 조회

 

ex) 시퀀스를 새로 생성하고, 현재 시퀀스 값을 표시하시오.

-> creat table BusinessCard (id int, Name varchar2(255), Address varchar2(255), Telephone varchar2(255));

    ※ 먼저 테이블 생성

-> create sequence businesscard_seq;

    ※ 시퀀스 생성

-> select businesscard_seq.nextval from dual; 

    ※ 새로운 값 시퀀스 생성 (테스트)

-> select businesscard_seq.currval from dual;

    ※ 현재 시퀀스 조회

-> insert into BusinessCard values (businesscard_seq.nextval, 'Bob', 'Seocho-dong 123', '123-4567');

    ※ nextval 을 이용해 id 값을 얻어내 레코드 추가

-> insert into BusinessCard values (businesscard_seq.nextval, 'Sam', 'Sinsa-dong 345', '321-4321');

    ※ nextval 을 이용해 id 값을 얻어내 레코드 추가

 


< Point> 

☆ DML(Data Manipulation Language)는 테이블의 데이터를 CRUD하는 언어이고,

    DDL(Data Definition Language)는 테이블의 스키마에 영향을 주는 언어,

    DCL(Data Control Language)는 데이터나 테이블/DB에 접근권한을 설정하는 언어이다.

즉, 테이블 구조에 영향을 미치는 언어는 DDL이다.

☆ 데이터 사전(Data Dictionary)는 테이블 스키마(Schema)의 정보가 저장되는 곳이다.

☆ 오라클에서 제공하는 데이터 타입은 number, varchar, varchar2가 있고, 

    boolean는 지원하지 않는 데이터타입이다.


< 요약 >

* 스키마 정의

- DB(Data Base) 생성, 테이블 생성

* 자료형

- 테이블의 각 컬럼의 자료형 지정

- NUMBER, CHAR, VARCHAR, VARCHAR2, DATE, BLOB, ...

* 제약조건

- 테이블의 제약조건을 지정

- NOT NULL, UNIQUE, PRIMARY KEY, FORIGN KEY, CHECK, DEFAULT

반응형