[23.01.09] 54일차 [데이터베이스] Data Dictionary, Create, 제약조건, user_constraints

W·2023년 1월 9일
0

국비

목록 보기
81/119

연습문제

1번, 2번

  • 파일 확인
  • 생성 및 구조 확인

3번

4번

5번

6번

7번

8번

9번

10번, 11번, 12번

13번, 14번, 15번

16번, 17번

18번

19번, 20번, 21번, 22번, 23번

Data Dictionary

  • Dictionary에는 DB관리에 필요한 모든 정보가 저장되어있다.
  • DBA는 Dictionary의 정보를 이용하여 효율적인 데이터베이스 운영을 위해 필요한 정보를 획득할 수 있다.
  • 일반 사용자 및 Application 개발자에게도 데이터베이스에 대한 중요한 정보를 제공한다.

Data Dictionary 구성

  • Base Tables
    DB의 모든 정보를 Oracle이 보기 쉬운 형태로 기록해 놓은 테이블
  • Data Dictionary Views
    • Base Table을 사용자가 보기 쉬운 형태로 만들어 놓은 뷰
    • Data dictionary views의 유형
      1) user_xxx : 내가 소유한 object 정보 조회
      ex) user_objects, user_tables, user_views
      2) all_xxx : 내가 소유하거나 + 접근 가능한(다른 사용자 소유) object 정보 조회
      ex) all_objects, all_tables 등
      3) dba_xxx
      4) v$xxx

데이터 검색을 위한 주요 Data Dictionary Views 사용하기

  1. DICTIONARY(DICT) : 각 Dictionary에 대한 정보
  2. USER_CATALOG(CAT) : 사용자 소유의 테이블, 뷰, 동의어 시퀀스 목록을 보여줌
  3. USER_OBJECTS(OBJ) : 사용자 소유의 모든 오브젝트에 대한 정보를 보여줌
  4. USER_TABLES(TABS) : 사용자 소유의 모든 테이블에 대한 정보를 보여줌
  5. USER_TAB_COLUMNS(COLS) : 사용자 소유의 모든 테이블을 구성하고 있는 컬럼에 대한 정보를 보여줌
    괄호안의 동의어로도 조회 가능

Dictionary 데이터 딕셔너리 사용하기

desc dictionary;

select *
from dictionary
where table_name = 'USER_USERS';

Table(테이블)

  • DQL(데이터질의어)
    select
    => 작업단위 : row(행)
  • DML(데이터조작어)
    insert, update, delete
    => 작업단위 : row(행)
  • DDL(데이터정의어)
    create table, alter table, drop table, truncate table
    => 작업단위 : object(객체) = table
    => autocommit 내포함(자동저장됨)

[참고] 데이터 모델링

요구사항 수집 및 분석
-> 개념모델링(ERD)
-> 논리모델링(구체화된 ERD, 테이블 차트)
-> 물리모델링(create table----;)

테이블 생성(create table)

  • 필수 : 테이블명, 컬럼명, 데이터타입, 컬럼사이즈
  • 옵션 : default값, 제약조건
  • 데이터타입
    • 숫자
      정수형 : number(p)
      실수형 : number(p,s)
    • 문자
      고정형 : char(p)
      가변형 : varchar2(p)
    • 날짜
      년/월/일 : date
      년/월/일/시/분/초 : timestamp

제약조건

  • 종류 : primary key, foreign key, unique, check, not null

[제약조건 선언 시기]

  • table 생성 시 : create table ----;
  • table 생성 후 : alter table ----;

[제약조건명 지정]

  • 사용자(개발자) 지정 : 고유하고 의미있는 제약조건명 부여를 권장함
    ex) 테이블약자_컬럼약자_제약조건유형약자
    emp_eid_pk
    emp_lname_nn
    dept_locid_fk
    emp_email_uk
    emp_sal_ck
  • 사용자(개발자) 생략
    Oracle이 고유한 제약조건명 자동 부여함
    (sys_cxxxxx)

[제약조건 선언 문법]

➀ NOT NULL 제약조건

  • 컬럼 레벨의 문법만 가능
  • null값이 들어올 수 없는 제약조건
  • 필수 정보인 컬럼에 not null 제약조건 사용함
create table test1
(id number(10) constraint t1_id_nn not null, 
name varchar2(30) constraint t1_name_nn not null,
job varchar2(20),
email varchar2(20),
phone varchar2(20) constraint t1_ph_nn not null,
start_date date);

➁ UNIQUE 제약조건

  • 고유한 값만 들어올 수 있는 제약조건, 중복된 값은 들어올 수 없는 제약조건
  • 주민번호, 전화번호, 메일주소, 학번, 사번 등의 컬럼에 활용됨
create table test2
(id number(10) constraint t2_id_nn not null constraint t2_id_uk unique,
name varchar2(30) constraint t2_name_nn not null,
job varchar2(20),
email varchar2(20),
phone varchar2(20) constraint t2_ph_nn not null constraint t2_ph_uk unique,
start_date date, constraint t2_email_uk unique(email));

➂ PRIMARY KEY 제약조건

  • 기본키 제약조건
  • NOT NULL + UNIQUE의 성격을 가짐
  • 테이블당 한번만 선언 가능함!
create table test3
(id number(10) constraint t3_id_pk primary key,
name varchar2(30) constraint t3_name_nn not null,
job varchar2(20),
email varchar2(20),
phone varchar2(20) constraint t3_ph_nn not null constraint t3_ph_uk unique,
start_date date,
constraint t3_email_uk unique(email));

➃ FOREIGN KEY 제약조건

  • 외래키 제약조건
  • 정의 : 자기 자신 테이블이나 다른 테이블의 특정 컬럼(PK, UK)을 참조하는 제약조건

➄ CHECK 제약조건

  • 광범위하게 활용되는 제약조건
  • 컬럼이 만족해야하는 조건문을 자유롭게 지정하는 제약조건

테이블 레벨, 컬럼 레벨 제약조건 선언 방식이 같다

  • 테이블 생성 시 제약조건 정의하여 테이블 생성하기
create table employees1
(employee_id number(6) 
constraint emp1_employee_id primary key,
first_name varchar2(20),
last_name varchar2(25) 
constraint emp1_last_name_nn not null,
email varchar2(25) 
constraint emp1_email_nn not null
constraint emp1_email_uk unique,
phone_number varchar2(20),
hire_date date 
constraint emp1_hire_date_nn not null,
job_id varchar2(10) 
constraint emp1_job_nn not null,
salary number(8,2) 
constraint emp1_salary_ck check(salary>0),
commission_pct number(2,2),
manager_id number(6) 
constraint emp1_manager_fk references employees(employee_id),
department_id number(4) 
constraint emp1_dept_fk references departments(department_id));

user_constraints

내 소유 테이블에 선언되어 있는 제약조건 정보 볼수 있는 테이블

desc user_constraints;

select constraint_name, constraint_type, search_condition, r_constraint_name
from user_constraints
where lower(table_name) = 'employees';

제약조건 조회하는 스크립트 파일 만들기


search_cons.sql로 저장

0개의 댓글