ER 을 하지 왜 이거를 하나??
그 이유는 ER은 굉장히 복잡하고 의미가 모호하다.
또한 Data Type 정의가 어렵다고 한다.
Relation 은 Set theory 부터 개념이 나왔다.
관계들의 집합을 뜻한다.
또한 Relation 은 값들의 Table 처럼 보여진다.
row 들의 집합으로 구성되어있다. 이 말은 Row들의 중복을 허용하지 않음을 뜻한다.
행을 Tuple 열을 Attribute 라고 부른다.
또한 Column 은 Column Header를 가진다.
위에서 말한것 처럼 Set 을 만드려면 중복이 없어야한다.
이 중복을 없게 하는 Key 가 Key attribute 이다.
그래서 STUDENT table 의 Key attribute 는 STUDENT 들 만 가질수있는것이 KEY 가 되면 되지 않겠나?
뭐 Student_NO 처럼 학번은 학생 한명마다 다르기 때문에 이런 값이 되면 될것이다.
그리고 Surrogate Key 는 강의를 들어도 잘이해가 안가서 그냥 인터넷보고 좀 배움...
https://kghworks.tistory.com/109
relation schema는 순서를 지키고 각각의 domain이 있는것이다.
그리고 the degree of the relation R 은 R의 attribute 수와 같은 말이다.
밑의 예시를 보면 CUSTOMER(Cust_id,Cust_name,Addr,Phone#) 의 degree 는 4 인것이다. 속성이 4개 있기떄문.
그리고 각각의 attribute 는 Valid 한 값들의 집합의 Domain 을 가지고있다.
the domain of unsigned int 는 0~2의 32 제곱-1 까지가 Valid 한것이다.
속성의 특정 값을 가지고 있는 모음을 Tuple 이라고 한다.
Ordered SEt 이고 속성의 Domain 으로부터 와야한다...
Tuple 은 Record 와 같은 말이다.
결국 Relation 은 Valid 한 값을 가지고 있는 Tuple 들의 모음이고
Tuple은 Column 의 Group으로 부른다. 이 Tuple이 모여있는게 Relation.
Valid 한 Value의 Set 이다. Domain 에는 Flat 하고 Atomic 한 값이 들어가야한다. 단일 값만 들어가야한다는것이다.
속성의 값, 타입 ,제약사항 등에 대한 값의 범위를 Domain 이라고 한다.
또한 속성의 값은 역활을 알려주는것으로 할수있다한다.
Invoice-date 와 Payment-date 와는 다른 역활을 할것으로 이름을 보고 알수있고 같은 날짜여도 의미가 다르게 된다.
Varchar 도 도메인.
Attribute 가 가질수있는 Domain 의 Subset 이다.
정의에 따른 값들이 모든 가능한 Set이 해당 Colum이 가질수 있는 값이다.
N 개의 Attribute 를 순서대로 가지고있는 Relation 을 R 이라고 하자.
그 R의 State 는 모든 Combination 의 Subset 이다.
r(R)={<0,a>,<0,b>,<1,a>,<1,b>}인 경우, 이는 가능한 relation state 중 하나이고, r은 4개의 2-tuple을 가진다. (attribute가 2개이므로 2-tuple)
Tuple order 는 고려안하지만 Attribute 순서는 고려해야한다.
정의에 포함되어있기 때문이다.
Null 로 쓰이는건 3가지가 있다.
Unknown - 아직 그 attribute 에 어떤 값이 올지 모르겠다
Not available - 모를수도 있지만 이 정보에 대해 이요할수 없다.
Inapplicable - 한국 사람에겐 State가 없는것처럼 적용이 불가하다
어떤값이 허용가능하고 어떤값이 Database 에 있으면 안된는지 결정해야한다.
그래서 Category를 3개로 나누어 이것들을 가져야한다고 한다.
Category 1 - Value들은 Atomic 한 값들만 가질수 있따고한다.( Atomic 은 원자적인,,? 느낌으로 더이상 깨질수 없는값들)
Category 2 - 명시적으로 걸어야하는 제약조건
Category 3 - 서비스가 규정한 Rule 이 있다.
이 제약조건이 없으면 관계형 Model 이 흠결이 있다는것이다
흠결이 생기면 이 Database 를 신뢰할수가 없다.
그래서 어떤 제약조건들이 있어야하나?
Key constraints - 중복이 있어서는 안된다
Entity integrity constraints - Null 이 있으면 안된다.
Referential integrity constraints - 참조 당할땐 해당 Entity 가 있어야한다.
또한 Domain constraints 로 도메인 벗어난 값을 허용하지 않는다.
어떤 Key 가 아닌 Field 도 Null 이 허용 될수도 안될수도 있다. - Not Null Constraints
relation 의 모든 Tuple 은 Unique 해야한다.
또한 Superkey 는 Attribute 값들에 대해선 중복이 안된다. Super Key 만 알면 tuple 을 식별가능하게 해야한다.
t1<1,홍길동> t2<1,홍길동> 이게 안된다.
Key 는 Minimal 한 Super key 로 일부만 제거 했더니 Superkey 의 역활을 못한다.
그래서 Superkey 는 key 인가? Superkey 는 key 가 아니다. 하지만 key는 Superkey 이다.
Primary Key 는 Tuple 을 유일하게 식별할떄 쓰인다.
relationa data scehma 는 같은 DB에 소속되어야하는 SET 이다.
어느 시점에서 제약조건을 깨고 있으면 Valid 하지 않다는 뜻이다.
개체 무결성 제약조건으로 Primary Key 가 Null 을 가지면 안되나든ㄴ 것이다.
그 값의 PK가 Null 이면 식별이 안되는 문제가 발생함.
그리고 PK 값에는 여러개의 Attribute 가 허용 가능하다면 그중 어느것도 NULL 이면 안된다. 하지만 PK 값이 아닌 Attribute 에 대해선 Null 일수도 아닐수도 있다.
Entity 나 key Constraint 는 특정 Relation 하나에만 종속된 제약조건인데 이건 두개 혹은 두개 이상에 관여한다.
상대가 referenced PK값과 같아야한다.
NUll 이 오면 안된다 당연하게.
우리는 Update 연산에서 어떤 제약조건을 위반했고 위반했을때 어떤 Action을 해야하는지에 대해서 볼꺼다.
Update 는 일단 group 으로 한번에 될수 있게 할수있다.
그리고 Update 할떄 다른 update 도 자동으로 해야함.
직원이 오면 그 직원 총 수도 하나 증가시켜줘야하는것처럼 위반을 잘 다뤄야한다.
Integrity Violation 이 발생하면 4가지 액션을 할수있다.
가장 기본적인게 Cancel,Reject 하는것이다 사용자가 다시 fix 한다.
다음은 말도 안되지만 그냥 수행하는것이다. 그냥 너가 참고해라 라고하고 수행..
다음은 DB의 일관성 유지하기위해서 전파가 되는데 위반이 된것을 다른것을 ㅗ바꿔줘야한다.
또한 사용자 Program 짜서 위반사항 Fix,,? 해줘야한다..? 이건 다시 알아봐야할듯
Cecilia 를 넣으려 하는데 SSN 인 PK 값이 NULL 이면 Entity Integrity Constraint Violation 이 발생한다.
또한 SSN이 같으면 Key Constraint Violation 이 발생한다. PK 가 같은데 어떻게 넣냐 이거다.
또한 Department PK 인 DNumber 에 7번이 없는데 Kolonsky 는 7번을 어떻게 참조함...? 이게 referential Integrity constraint violation 이다.
DELETE 는 referintial Constraint 만 Violation 한다. 2번째를 보면 참조하는 tuple 이 있으면 Reject 당한다.
그렇기에 자기를 참조하는 모든 Tuple 이 없으면 삭제를 가능하다.
FK S_id 가 Supplier S_id를 참조하는데 참조하는 tuple 을 삭제하겠다는말이다,,,
젤 첫번쨰는 Update 된다.
하지만 Salary 가 99999 넘으면 안된다는데 넘으면 허용 X
이건 Domain Constraint 위반이다
두번쨰는 referential constraint violation 이다.
업슨ㄴ tuple을 참조하려하기 때문,
세번쨰는 Key constraint 로 987654321 이 동일 할수가 없다.
마지막은 Entity integrity constraint 이다. NULL 은 허용 X
1) Primary key를 tuple 을 삭제하고 update 를 해준다.
2) Update 할 Key 가 Fk 일떄 NULL 이면 PK 의 일부면 허용핮 ㅣ안흔ㄴ다.
3) PK,FK 둘다 아니면 위반이다.