날아라쩡글이의 블로그입니다.

DDL 본문

중앙 HTA (2106기) story/JDBC story

DDL

날아라쩡글이 2021. 10. 27. 20:15
반응형

DDL (데이터 정의 언어 )

  • 오라클의 구조를 정의한다. 
  • CREATE, DROP, ALTER, TRUNCATE
  • 데이터 베이스의 주요 객체를 생성한다. 
    • 테이블
      • 데이터의 실제 저장소이다. 
      • 데이터의 기본 저장단위로 행과 열로 구성되어있다.
      • 하나 이상의 테이블을 사용해서 만든 가상의 테이블이다. 
      • 실질적인 데이터를 저장하지 않는다. 
    • 시퀀스
      • 오라클에만 존재한다. 
      • 일련번호 생성기 
    • 인덱스
      • 검색성능을 향상시키기 위해 데이터에 대한 색인을 가지고 있다. 
      • 색인: 어떤 꾸러미에 들어있는 DB의 지름길 키이다. 
      • 값이 정렬되어있다. 
    • 동의어
      • 객체에 대한 다른 이름을 제공하는 것이다. 
      • 객체 A를 B로 가르킬 수 있다. 
    • 트리거
      • 테이블에 값을 변경하거나 입력시 다른 테이블의 값을 변경해주는 것이다. 
    • 스케쥴러
      • 일정한 주기로 실행되는 것을 의미한다. 
      • 이벤트와 같은 역활을 한다. 

DDL 테이블 생성 

  • create table( 
     컬럼명, 속성, [키값 설정]
    )
    • 컬럼 생성의 경우 많이 사용하지 않는다. 
    • 테이블의 우측버튼을 클릭하면 테이블 생성이 있어서 GUI로 입력을 할 수 있다. 
    • SQL명령어를 입력하는 방법
    • java -> table-> column -> 왼쪽 DDL -> export
      • erd를 그려서 입력하는 방법이 존재한다. 

DDL 테이블 삭제

  • DROP TABLE

DDL 테이블 변경

  • 컬럼 추가 
    • ALTER TABLE 테이블명 ADD (컬럼명 데이터타입(크기))  [기본값];
  • 컬럼 수정
    • ALTER TABLE 테이블명 MODIFY(컬럼명 데이터타입(크기)) [기본값];
  • 컬럼 삭제 
    • ALTER TABLE 테이블명 DROP(컬럼명 데이터타입(크기)) [기본값];
  • 테이블 이름 변경
    • RENAME 테이블명 TO 새테이블명
      • SQL에 대해서 테이블이름을 변경하는 것은 java구문도 수정해야하는 엄청난 일이다. 
      • 되도록 수정하지 않은 것이 좋다
  • 테이블 절단하기 : 엑셀에서 행삭제하기와 동일
    • TRUNCATE TABLE 테이블명;
      • truncate table의 경우 아예 깨끗하게 삭제가 된다. 
      • rollback으로 다시 행을 살릴 수 없다. 
      • 테이블에서 모든 행을 제거한다. 
      • 해당 테이블이 사용하는 저장공간을 해제 한다. 
    • 테이블을 삭제하는 것은 delete ~ from 절을 사용하면 RollBack으로 다시 살릴 수 있다. 

시퀀스 (sequnce)

  • 일련번호를 자동으로 생성하는 데이터 베이스 객체이다. 
  • 기본키 값(행을 대표하는 값)을 생성하는 데 주로 사용된다. 
    • 행을 추가할 때 획득 된다. 
  • creat sequence 시퀀스 명; 으로 생성된다. 
    • create sequence 시퀀스 명 
    • [ increment by a ]
      • 전부 숫자로 입력한다. 
      • 한번에 얼만큼 증가 시킬 것인지 에 대한 설정이다. 
      • default값은 1이다. 
    • [ start with b  ]
      • 시작할 숫자 값을 입력한다.
      • default값은 1이다. 
    • [  { maxvalue c | nomaxvalue }  ]
      • 최대값을 설정한다.
      • default값은 nomaxvalue이다. 
      • 둘중에 하나로 선택하여 최대값을 입력할 수 있다. 
    • [  { minvalue d | nominvalue }  ]
      • 최소값을 설정한다.
      • default값은 nominvalue이다. 
      • 둘중에 하나로 선택하여 최소값을 입력할 수 있다. 
    • [{ cycle | nocycle }]
      • 설정한 최대값까지 갔다가 다시 처음 부터 시작하는 값이다. 
      • default는 nocycle이다. 
      • cycle을 설정할 경우 maxvalue의 값을 최대한 높은 숫자로 설정해야한다. 
    • [{ cache e | nocache }]
      •  일련번호를 미리 생성하고 요청시에 전달하는 것이다. 
      •  default의 값은 20이며, 메모리내에 20개를 저장해 놓고, 컴퓨터를 끄게 되면 번호가 사라지고 21번부터 다시 측정된다. 
    • 시퀀스의 삭제
      • drop sequence 시퀀스명 
    • 시퀀스의 수정
      • alter sequence 시퀀스명
      • start with을 제외한 나머지는 설정을 변경할 수 있다. 
        • 시작값을 수정할 수 없는 이유는 
          • sequence는 고유한 data이다. 
          • start with을 다시 1로 수정하여 생성하게 될 경우 1이 중복되어 생성된다.
          • primary key가 될 수없기 때문에 start with은 수정할 수 없다. 
    • 시퀀스 사용 
      • 시퀀스명.NEXTVAL
        • 새로운 일련번호를 생성하는 것이다. 
      • 시퀀스명.CURRVAL
        • NEXTVAL에서 생성한 일련번호를 가져와서 다른 필요한 부분에서 다시 사용하는 것이다. 
        • 많이 사용하지는 않는다. 
        • 시퀀스에서 현재 사용하는 값을 가져오는 것이아닌 방금전에 새롭게 발행한 값으로 가져온다. 
        • APP과 새롭게 연결할 떄마다 새롭게 NEXTVAL로 연결해야 CURRENT를 사용할 수 있다. 

이런방법과  혹은 

  • int seqNo = orderDao.setSequnceNo()로 메소드를 만들어서 
    order. setNo(seqNo)
    deliverty.setNo(seqNo)
    payment.setNo(seqNo)으로 입력값을 넣을 수 있다. 
  •  만들어서 가져오기 때문에 insert문에서는 따로 생성을 하지 않아도 된다. 

시퀀스 입력방법

  1. 직접 시퀀스를 입력할 수 있다. : 1개만 사용할 경우 이 방법을 이용한다. 
  2. 시퀀스를 실행하는 쿼리를 만들어서 입력하는 방법으로 진행하기도 한다. 
    • 각기 입력을 하기위해서 여러테이블에 동일번호가 겹칠경우 
    • 이런 방식이 안전하다. 
    • 지금은 dao방식은 이렇게 진행하지만 spring은 current를 사용하게 하기 떄문에 시퀀스의 전략이 달라진다. 

무결성 제약조건

  • 데이터의 일관성과 무결성을 유지하기 위하여 정규화를 사용했었다.
  • 테이블에 유효하지 않는 데이터가 입력되는 것을 방지한다. 
    • 이상한 데이터가 들어가서는 안된다. 
  • 해당 테이블에 데이터가 추가, 삭제, 변경될 때마다 무결성 제약조건을 검사한다. 
    • 위배시에는 추가,삭제,변경이 되지않도록 조절한다. 
  • 무결성 제약조건은 5가지의 종류가 존재한다. 
    • create table 테이블명 ();으로 생성할 때 무결성 제약조건을 생성한다. 
  1. not null 제약조건
    • 해당컬럼의 값이 null값이 입력되지 못하도록 지정한다. 
    • 고객테이블의 이름컬럼, 도서테이블의 제목컬럼, 상품테이블의 상품명컬럼처럼 null이 있으면 안될 때 사용한다. 
    • costomer_name varchar2(50) not null
      • not null의 제약조건이다. 
  2. unique 제약조건
    • 고유키 제약조건이라고 불린다. 
    • 테이블 전체에서 고유한 값을 가져야한다. 
    • null의 입력이 가능하다. 
    • 고객정보를 등록할 때, 이메일은 동일해서는 안되지만, 홍보를 받기 싫어 입력을 하지 않을 때 사용하는 값이다. 
    • costomer_email varchar2(250) unique
      • 중복을 허용하지 않지만, null값은 가능하다. 
      • 고유키 
  3. primary key제약조건
    • 기본키 제약조건
    • 테이블의 각 행을 고유하게 식별할 수 있는 값을 가져야한다. 
    • 테이블 전체에서 고유한 값을 가져야하고, null값은 허용하지 않는다.
    • costomer_no number(7) primary key
    • 고유하게 식별하는 값으로, 아무이유없는 값을 입력하는 것이 제일 좋다. 
      • 시퀀스로 자동 증가값을 넣는 이유와 동일하다. 
      • 숫자 안담는 경우가 많다. 
      • 중복은 허용하지 않음, null값은 허용하지 않는다. 고유한값이 존재한다. 
  4. check제약조건
    • 제시된 조건을 만족하는 값을 가져야한다. 
    • customer_point numbr(10) check (customer_point >= 0)
    • customer_gender char(6) check (customer_grade in('M','F'));
      • 비교연산자로 조건을 제시한다. 
      • 참이되는 값만을 담을 수 있다. 
      • 제시된 조선식이 참이 되는 값만 허용한다. 
  5. foreign key제약조건 (참조키 제약조건, 외래키 제약조건)
    • customer_grade varchar2(10) references customer_grades(grade_id)
    • 해당 컬럼의 값은 다른 테이블 혹은 같은 테이블의 특정 컬럼의 값과 관련된 값만을 가져야한다.
    • 참조키와 외래키는 기본적으로 null값이 허용된다. not null의 설정도 가능하다. 
      그러나 부모테이블이 존재해야한다. 
    • 부모테이블을 참조하는 자식테이블에 부모레코드를 참조하는 자식레코드가 남겨져있다면 무결성 제약조건으로 인하여 삭제할 수 없다. 
    • 자식테이블을 참조하고 있는 부모테이블은 제약조건이 따르고 있다.
    • 부모테이블을 생성하고 자식테이블을 생성하지만 삭제를 할 때는 
      자식테이블을 먼저 삭제하고 부모테이블을 삭제해야 할 수 있다. 
      • 자식 테이블 = 종속 테이블
        • FOREING KEY로 설정된 컬럼은 부모테이블의 기존값과 일치하거나 NULL이어야한다.
      • 부모 테이블 = 참조 테이블
        • 자식테이블이 참조하는 부모테이블의 컬럼은 PRIMARY KEY 혹은 UNIQUE 제약조건이 정의된 컬럼이어야 한다. 
      • 사원 (부모 테이블, 종속 테이블)의 DEPARTMENT_ID는 부서( 자식테이블, 참조테이블)의 DEPARTMENT_ID를 참조한다. 
      • 부서 테이블 (자식테이블) MANAGER_ID는 사원테이블(부모테이블)의 EMPLOYEE_ID를 참조한다. 
      • 사원 테이블 (자식테이블)의 JOB_ID는 직종테이블(부모테이블)의 JOB_ID를 참조한다. 
      • 자식테이블에서 참조하고 있는 부모테이블의 행은 삭제 할 수 없다. 
        • 제약조건이 걸려있기 때문이다. 
      • 다른 테이블에서 참조시 테이블내에 동일한 값이 있으면 안되기 때문에 기본키와 유니크키만 참조 가능하다.
      • 5가지의 제약조건은 테이블에 저장되는 값에 대해서 우리가 원치않는 값이 입력되지 않도록 하는 최소한의 장치이다. 

제약조건의 정의 

  • 제약조건의 정의는 두가지로 나눠진다. 
    • 컬럼 레벨 제약조건의 정의 
      • 컬럼 레벨의 제약조건의 정의는 지금까지 앞서 이야기한 작성방법이 컬럼 레벨 제약조건이다. 
      • 컬럼 바로 옆에 작성을 하여 제약조건을 주는 방법이다. 
    • 테이블 레벨의 제약조건의 정의 
      • 테이블 레벨의 제약조건은 컬럼 옆이 아닌 컬럼 아래에 작성하는 제약조건이다. 
      • 하나 이상의 컬럼을 조합하여 제약조건을 정의할 수 있다. 
      • NOT NULL제약조건을 제외한 모든 제약 조건을 정의할 수 있다. 
      • 제약 조건을 작성하고, (컬럼명, 컬럼명)을 작성해주어야 한다. 
      • 2개이상의 컬럼을 조합할 경우 테이블 레벨의 제약조건을 정의해야한다. 
      • 설계시 JAVA TOOL을 이용해서 만들면 편하다. 
      • 물리모델
        • 특정 DB에 꼭 맞게 DATA TYPE, SIZE을 작성한 것이 물리모델이다. 
        • 물리모델은 DB와 DDL을 만들 수 있는 중요한 지표이다. 
      •  논리 모델 
        • DATA TYPE을 작성하지 않고 컬럼의 이름을 작성해 놓는다. 
        • 테이블의 정보를 쉽게 파악할 수 있다. 
        • 논리모델은 1개에 물리모델은 여러개로 만들 수 있다. 
        • 논리모델의 경우 비개발자와 협의시 사용한다. 
반응형
Comments