data를 관계(=Relation =Table)의 집합으로 나타냄
domain
:
attribute가 가질 수 있는 값들의 집합.
NULL이 들어갈 수도 있다.
각 domain을 위해 data type 또는 format을 명시하기도 함
example :
NULL
은 두 가지 의미르 사용됨relation schema
:tuple
:relation 상태 = relation instance
:차수가 인 Relation Schema 은 으로 표기
대문자 등은 relation의 이름을 나타냄
소문자 등은 relation의 상태(= instance)를 나타냄
relation r(R)의 tuple 으로 표기.
여기서 는 attribute 의 값
와 는 t에서 attribute 의 값 를 나타냄
서로 다른 Relation에서 동일한 이름의 Attribute를 사용할 수 있다
ex. STUDENT, FACULTY, EMPLOYEE Relation이 모두 Name Attribute를 갖는 경우
(STUDENT.Name, FACULTY.Name, EMPLOYEE.Name)
관계 모델 제약 조건
:domain 제약조건
:key 제약조건
:superkey
:Key
: Super Key들 중에서 최소 attribute 개수를 갖는 Key. (Key Super Key)Key
attribute의 값은 Relation 내 각 tuple을 유일하게 식별하는 데 이용할 수 있음후보키(Candidate Key)
: 하나의 relation 안에서 여러개의 Key를 가질 수 있는데, 이들을 후보키라고 함
기본키(Primary Key)
: 여러 후보키를 가지면 이 중에서 하나를 임의로 선택하여 기본키로 지정함
기본키를 구성하는 Attriute는 밑줄로 표시함
관계 DB schema
Entity 무결성 제약조건
:참조 무결성 제약조건
:write(insert, delete, update) 연산을 수행하는 경우, schema에 정의된 제약 조건을 위반하지 않아야 한다.
제약조건을 위반하면 write를 거부하거나, 위반 사실을 사용자에게 알려 정정하도록 해야 함
domain 제약조건
위반이 발생할 수 있는가?
가능
ex : 원자값이 아니라 여러값을 넣으려 할 때
key 제약조건
위반이 발생할 수 있는가?
가능
ex : 기존 tuple과 똑같이 중복되는 tuple 삽입
NULL에 대한 제약조건
위반이 발생할 수 있는가?
가능
ex : NULL이 되면 안되는 attribute에 NOT NULL값을 삽입
entity 제약조건
위반이 발생할 수 있는가?
가능
ex : key값에 NULL값을 넣으려 할 때
참조 무결성 제약조건
위반이 발생할 수 있는가?
가능
ex : DNO에 7로 insert한다면, DNUMBER에는 7이 없기 때문에 insert하지 못함
domain 제약조건
위반이 발생할 수 있는가?
불가능
그냥 tuple 하나를 삭제한다면 당연히 여러값이 중복되는 일이 없음.
key 제약조건
위반이 발생할 수 있는가?
불가능
그냥 tuple 하나를 삭제한다면 당연히 여러값이 중복되는 일이 없음.
NULL에 대한 제약조건
위반이 발생할 수 있는가?
불가능
그냥 tuple을 지우는 것만으로 NOT NULL을 넣어야 할 자리에 NULL이 들어갈 수 없음.
entity 제약조건
위반이 발생할 수 있는가?
불가능
그냥 tuple을 지우는 것만으로 key가 NULL이 되지 않음
참조 무결성 제약조건
위반이 발생할 수 있는가?
가능
ex : 만약 DEPARTMENT의 Research 부서를 날리면, DNUMBER=5를 참조하던 Employee들은 존재하지 않는 Primary key를 참조하게 된다.