본문 바로가기

Database

Database 6장-1

SQL : 관계 데이터 베이스의 표준언어로 채택
그냥 한번 읽어보세요~
SQL은 구현된 데이터 언어기 때문에 table,row, column이란 용어를 개념적인것 대신 사용한다 . SQL DDL: create, alter, drop (3가지 명령어로 DDL문(데이터 정의 언어)은 구성되있다). 이런 기존의 table,attributes, constraints를 만들고 지우고 수정하는것을 schema evolution이라 한다.
각각 분류된 그룹들을 묶어서 그 Table,view,constraints들을 관리한다(각 Schema에 T,V,C등이 들어있음을 볼 수 있다). 이런 그룹핑 되있는것을 database라 하고 dbms가 관리한다. 각각이 Schema A,B ..등이 된다. dbms는 여러 schema를 관리하고 여러 사람이 사용할 수 있는 환경을 제공해준다.

Schema

 

Schema
-테이블과 기타 여러가지 구조물들을 포함하는 같은 응용그룹에 속한것들을 Schema라고 한다.
-Schema에는 스키마 이름, 관리자 id, 각 엘리먼트에 대한 설명정보가 포함되있다.
-Schema elements에는 tables,constraints,views,domains, and other constructs (such as authorization grants)

SQL로 Create SCHEMA "name" AUTHORIZATION "관리자 이름"; (CREATE하는 DDL문)

 

Catalog

 

이렇게 정의한 Schema의 정보를 모아놓은 것이 system catalog(dbms에서 database에 대한 meta-data를 포함하는것) 이다.


-Catalog : SQL 환경에서 Schema들의 이름의 집합들

-INFORMATION_SCHEMA : catalog는 항상 특별한 형태의 Schema를 갖고있다. (Schema들의 정보를 담고 있는 meta--data를 담고 있는 Schema를 가짐)

-dbms가 관리하고 있는 모든 elements에 대한 meta-data에 대한 모든 정보를 INFORMATION_SCHEMA가 갖고 있으며 이것이 system catalog다 

 

CREATE TABLE schema name(생략가능).schema table 생략하게 될 시 CREATE TABLE문을 사용하는 user가 사용할 수 있는 Schema에 자동적으로 생성됨.
지원하는 데이터 타입
Date and Time이라는 방식의 타입
CREATE DOMAIN "도메인 이름 " AS "타입"; DEFAULT clause를 이용해 default값을 명세하는게 가능하다. 시스템에 따라 이 domain타입을 쓸수도 있고 못쓸 수 도 있다. 어떤 상용 dbms에서는 CREATE TYPE command가 존재한다.
구성요소는 ,로 구분하고 ;로 문장을 끝낸다. NOT NULL이 선언된 attribute는 유저가 NULL값을 넣으면 입력이 되지 않는다. attribute가 정의된 후 그 뒤 아래에 제약조건을 정의해 놓았다. PK의 경우 NOT NULL이 무조건 선언되어 있다 (5장에서 배움!)
UNIQUE(Dname)의 선언은 중복값이 허용되지 않는다는 뜻 즉 alternate key라고 선언한것과 같다.(5장에서 배움!) DEPT_LOCATION의 경우 PK가 복합키로 선언되있는것을 볼 수 있다.
table의 column의 순서는 CREATE TABLE에서 column을 정의한 순서대로 나열된다. tuple들(row)의 순서는 우리가 알 수가 없다.(사용자가 sort하거나 dbms에서 sort하거나..몰라서?) 나머지 그림은 비슷한 내용이니까 생략

SQL에서 Arrtribute Constraints를 명세하고 Defaults를 지정하는 방법

 

- NOT NULL (attribute null값 허용x, 당연히 PK의 일부면 null값 불가능)
- 값을 제공해주지 않으면 default 값이 들어감
- 값의 범위나 제약조건 명세할 수 있는 CHECK 구문

 

순서대로 PK구문, alternate key구문, Fk구문 에 대한 내용, Constraint에 이름을 붙혀줄 수 있는 기능도 제공
DEFAULT 1을 붙여놔서 옆에 NOT NULL선언을 굳이 해줄 이유가 없음! 두번째줄은 Constraint에 이름을 붙혀준 모습이다. 이름을 붙혀놓으면 나중에 특정 제약조건을 지우는것이 가능해진다. 세번째는 참조무결성에 관련해서 제약을 걸어줄 수 있으며 referntial trigger action이라 부른다.

 

Referential Integrity(참조 무결성)

 

-FK 제약에 referntial triggered action문을 붙힐수 있다.
-옵션 : SET NULL , CASCADE(같이바뀌게) , SET DEFAULT (각 옵션은 삭제,갱신시 어떻게 할것인지 써있어야 한다-)

 

그림 franklin wong이 사라질 경우 DB는 Super_ssn 부분을 null로 변경시킨다. 값이 갱신될시에 같이 바꿔준다.referential trigger action의 DELETE와 UPDATE에 주어진 조건을 보면 된다.

 

administration부서가 없어질시 default 1 번 부서로 전부 변경, Research 부서는 같은값으로 갱신

CHECK를 이용해 Tuples에 제약을 명세

 

행 기반 제약조건(테이블 제약조건)
-개개의 행 전체에 대해 적용해야 한다
-삽입되거나 수정할때마다 적용되야 한다
CHECK문을 다수의 Attribute에 사용하는것이 가능하다. 이럴경우 참조 무결성절처럼 CHECK문을 별도의 구문으로 빼낼 수 있다.

delete하는 drop문

 

1. dependent table을 지우고 뒤에 옵션을 주는 명령어 
두가지 옵션
- RESTRICT : FK 같은것으로 참조 당하고 있으면 지울 수 없다. 완전히 독립된 table때만 지울 수 있게 한다.
- CASCADE : 상관없이 그 테이블을 지워버린다 연관있는 모든table 또한 같이 지워진다.

2.company SCHEMA 전체를 지우고 뒤에 옵션을 주는 명렁어
두가지 옵션
- RESTRICT: schema 내에 어떤 table이나 view나 constraint가 하나라도 있으면 지울 수 없다.
- CASCADE : 그냥 지워버린다

 

Alter command

 

-기존에 있는 table에 새로운 column을 첨가하거나 지우거나 정의를 변경하거나 제약조건을 추가하거나 제거할 수 있는 명령어

COMPANY.EMPLOYEE에 새로운 column을 첨가하는 명령어( 기존 table에 추가되는 초기 값은 모두 NULL이라 NOT NULL constraint는 붙힐 수 없다.)
C.E에서 Address라는 column을 전부 지워버려라
C.D 의 Mgr_ssn 의 DEFAULT값을 전부 지워라
C.D 의 Mgr_ssn 에 DEFAULT절을 추가해라
C.E 의 EMPSUPERFK의 제약을 제거해라 ( 제약에 이름을 붙히는 이유이며 뒤에가 CASCADE이므로 관련된 것도 전부 지워버린다)

'Database' 카테고리의 다른 글

Database 8장  (0) 2020.10.10
Database 7장-2  (0) 2020.10.02
DATABASE 7장  (0) 2020.09.26
Database 6장-2  (0) 2020.09.19
Database 5장  (0) 2020.09.07