[그림]



    Entity - Relation Data Model


    SQL (Structured Query Language)

    1) DDL(Data Difinition Language) : Create(생성), Alter(변경), Drop(삭제)

    2) DML(Data Monipulation Language) : Insert(삽입), Update(수정), Delete(삭제), Select(조회)

    3) DCL(Data Control Language) - 위 두 내용만 집중적으로 다루므로 생략



    1. DB, TABLE 생성(DDL)


    SQL을 설치하고 실행한 후 Schema를 생성한다.




    Schema 생성 후 생성된 DB를 USE 명령어를 사용하여 선택한다.


    [그림]




    DB를 선택했다면 이제 DB안에 테이블(개체, Entity) 및 속성(Attribute)를 생성한다.

    - 테이블 생성시 주의할 점!

    특성 중 1:N의 관계 (Student 와 Enrol, Enrol 과 Course)들은 1인 특성들이 먼저생성되어야 N의 특성이 생겨날 수 있다. 만약 1을 만들지 않은채 N을 만들어버린다면 1부분의 PK를 참조할 수 없어 N의 FK위반에러가 생긴다!


    [그림]




    속성들은 생성할때 이름과 데이터타입을 주어야한다.

    1. 문자형 : char(n)

        varchar(n) - n에는 총 용량이 들어가며 가변형, 즉, 입력받아 값만큼 사이즈를 준다.

       장점 : 생성시 메모리가 줄어든다.

       단점 : 수정 시 부하가 높다.

    2. 숫자형 : 정수(int, smallint (int형의 1/2))

       실수(float, double)

    3. 날짜형 : datetime(0.001초까지), smalldatetime(년, 월, 일 정도로 사용)


      * 수치형 데이터 타입은 Char형이 낫고, 계산형 데이터 타입은 int형을 쓰는것이 좋다!



    같은 방법으로 Course 특성을 생성한다.


    [그림]




    자신만의 KEY값이 없는 ENROL은 약한개체로 다른 KEY들의 참조를 받아야한다.


    [그림]




    하지만 1:N의 관계에서 N을 먼저 만들수도있다.

    위의 방식대로 student-enrol-course를 만들게 된다면

    enrol의 참조(cno)에서 오류가 발생한다. (위에서 설명했듯 참조할 곳과 참조할 값이 없기때문에 FK 위반 오류가 발생한다.)

    그래서 enrol의 참조줄을 빼고 실행한다.

    ex) create table enrol(sno char(3), cno char(4), midterm smallint, final smallint, grade char(1) primary(sno), foreign key(sno) references student(sno));

    이후 Course를 생성한 후 따로

    ex) alter table enrol

    add constraint fk_enrol_cno (<- 제약의 이름은 마음대로 해주어도 괜찮다)

    foreign key(cno) references course(cno)


    TABLE 삭제시에서는 자식 TABLE부터 삭제해야하는 것을 기억하자. (부모 값이 자식에 참조되고있으면 FK 위반 에러가 생긴다.)


    ★PK는에는 고유한 값을 가져야하며 NULL값을 가지면 안된다라는 제약(Constraint)가 있다, 위반시 PK 위반에러가 발생한다.

    ★FK에는 Primary키가 하나(Priamry Key(sno, cno)라고 쓰면묶어서 하나로 친다.)여야하고, Foreign Key가 두개이상이여야한다, 위반시 FK위반에러가 발생한다.


    2. Sample Data 넣기 (DML)


    [그림]




    ★수치 데이터가 아닌 모든것은 ' ' 표시를 해주어야한다!★


    하지만 이중 하나를 실행했을 때 실행이 되지 않는다. 왜냐하면 부모의 데이터 sno = 100과 cno = C413이 존재하지 않기 때문이다!( FK 위반에러 ) 그래서 INSERT해줄때도 부모의 값부터 넣어야한다.


    부모의 Sample데이터부터 넣으면 정상적으로 실행이된다. (Error code 1452가 뜬다면 FK위반오류니 부모에 데이터가 생성되었는지 잘 보자)


    만들었으면 테이블을 확인해보자!

    Select * from [테이블 명];


    [그림]



    테이블에 존재하는 데이터만을 삭제해보자.

    delete from [테이블 명] where KEY='' and KEY'';


    [그림]




    테이블에 존재하는 데이터를 수정해보자.

    update [테이블 명]


    [그림]


    업데이트를 할때 주의할점!!

    Domain 오류를 조심하자.

    만약 데이터 사이즈가 1인 enrol-grade에 'a+'라는 값을 넣으면 사이즈 초가가되어 Domain(영역)오류가 발생한다.



    무결성의 범위를 보자면 도메인 < 개체 < 참조 순이다.


     역할/액션

    insert 

    update 

    delete 

     parent

    restr 

     restr

     child

    restr 

    restr 


    ' > 데이터베이스' 카테고리의 다른 글

    1. 데이터베이스  (0) 2017.05.14
    5. 데이터베이스  (0) 2017.04.19
    4. 데이터베이스  (0) 2017.04.09
    2. 데이터베이스  (1) 2017.03.18
    1. 데이터베이스  (1) 2017.03.11
    Posted by Config