- 작성일
CH2. COMPANY로 보는 ER · 스키마 · 테이블
- Authors

- Name
- seren-wib
Contents
COMPANY 하나로 보는 ER · 스키마 · 테이블
같은 COMPANY를 세 층으로 그린 것. ① ER(ch2) → ② 변환한 스키마(ch3 3.4) → ③ 데이터 든 테이블(ch3 3.1). 아래 표는 개념마다 세 그림의 어디인지만 가리킴. 시험 "RDB 그리기" = ①을 보고 ② 그리기
1. ER 다이어그램
| 기호 | 뜻 |
|---|---|
| 사각형 / 이중 사각형 | entity type / weak entity type |
| 타원 / 밑줄 / 점선 밑줄 | attribute / key / partial key |
| 이중 타원 / 점선 타원 / 가지 친 타원 | multivalued / derived / composite |
| 마름모 / 이중 마름모 | relationship / identifying relationship. 이중 마름모는 약한 개체(이중 사각형)를 주인 개체에 묶어 주는 관계. 이게 있어야 약한 개체가 누구 건지 찍힘. COMPANY에선 DEPENDENTS_OF(직원–부양가족) 하나 (6절) |
| 선 한 줄 / 두 줄 | partial / total participation |
| 1, N, M | cardinality ratio (상대편 최대 몇 개) |
| 보라 (min,max) | 이 개체 하나가 관계에 최소·최대 몇 번. min 0 = 한 줄, min ≥ 1 = 두 줄 |
2. 관계형 스키마
- 테이블 6개 = 사각형 4 + M:N 마름모 1(WORKS_ON) + 이중 타원 1(DEPT_LOCATIONS)
- 화살표는 전부 FK → PK. 화살표 7개 = 1:N 마름모 2(Dno, Dnum) + 1:1 마름모 1(Mgr_ssn) + 재귀 1(Super_ssn) + M:N 2(Essn, Pno) + 이중 마름모 1(DEPENDENT.Essn) + 이중 타원 1(Dnumber)
- 이중 마름모(DEPENDENTS_OF)는 테이블을 따로 안 만들고, 약한 개체 DEPENDENT에 주인 PK(Essn)를 붙이는 걸로 끝. 그 Essn이 FK이면서 DEPENDENT PK의 일부
- 이름 바뀜 주의: Number → Dnumber/Pnumber, Name → Dname/Pname, EMPLOYEE.Ssn을 가져가면 Essn·Mgr_ssn·Super_ssn
3. 테이블 (relation state)
- 머리줄 = schema, 그 아래 행들 = state. 행 추가·삭제해도 머리줄은 그대로
- FK 칸 값은 반드시 상대 테이블 PK에 있는 값이거나 NULL. 그림 오른쪽 아래 다섯 줄이 삽입·삭제 위반 판정
4. 개체와 속성
| 개념 | 뜻 | ① ER | ② 스키마 | ③ 테이블 |
|---|---|---|---|---|
| Entity type | 데이터로 남기고 싶은 "것"의 종류. 직원, 부서, 프로젝트처럼 같은 속성을 가진 개체들의 틀. ER에선 사각형 하나, 테이블로 가면 테이블 하나 | |||
| Entity | 그 틀에 들어가는 실제 하나. 직원 John Smith 한 명. ER엔 안 그리고, 테이블에선 행 하나 | 안 그림 | — | |
| Entity set | 같은 틀의 개체 전부. 직원 전원. 사각형 하나가 이 전부를 대표하고, 테이블에선 행 전체 | — | ||
| Attribute | 개체가 갖는 값 하나. 직원의 급여. ER에선 사각형에 선으로 매단 타원, 테이블에선 열 하나 | |||
| Key attribute | 값이 개체마다 달라서 그 값만 알면 누군지 찍히는 속성. Ssn 알면 직원 한 명. 밑줄 친 타원. 한 사각형에 둘 이상 있을 수 있고(DEPARTMENT의 Name, Number), 테이블로 가면 그중 하나가 PK | |||
| Composite attribute | 더 작은 속성으로 쪼개지는 속성. Name = Fname + Minit + Lname. 타원에서 가지 친 타원들. 테이블엔 끝 가지만 열로 들어가고 Name 열은 없음 | Fname, Minit, Lname 열 3개 | ||
| Multivalued attribute | 개체 하나에 값이 여러 개 들어가는 속성. 부서 하나가 Bellaire, Sugarland 두 곳. 타원 두 겹. 테이블 한 칸엔 값 하나만 들어가서 테이블을 따로 뺌 | |||
| Derived attribute | 저장 안 하고 다른 데서 계산하는 속성. 부서 직원 수는 EMPLOYEE 세면 나옴. 점선 타원. 테이블엔 열 없음 |
5. 관계
| 개념 | 뜻 | ① ER | ② 스키마 | ③ 테이블 |
|---|---|---|---|---|
| Relationship type | 두 entity type이 어떻게 엮이는지. 직원이 부서에서 일함 = WORKS_FOR. 사각형 사이 마름모. 테이블로 가면 FK 열이거나 새 테이블 | |||
| Relationship instance | 그 관계의 실제 사실 하나. Smith가 5번 부서에서 일함. ER엔 안 그림. 테이블에선 FK 칸 값 하나 | 안 그림 | — | |
| Degree | 관계 하나에 entity type이 몇 개 끼는지. 직원–부서면 2(binary), 공급자–프로젝트–부품처럼 셋이 한 번에 엮이면 3(ternary). 마름모에 선으로 붙은 사각형 수를 세면 됨 | 행마다 FK 3개 | ||
| Cardinality 1:N | 한쪽 개체 하나가 반대쪽 개체 여러 개와 묶이고, 반대쪽 하나는 이쪽 하나하고만 묶임. 부서 하나에 직원 여럿, 직원은 부서 하나. 선 위 1과 N. 테이블로 가면 N쪽에 FK | |||
| Cardinality 1:1 | 양쪽 다 개체 하나가 반대쪽 개체 하나하고만 묶임. 부서 하나에 관리자 한 명, 그 직원은 부서 하나만 관리. 선 위 1과 1. FK는 두 줄 쪽에 | |||
| Cardinality M:N | 양쪽 다 하나가 여럿과 묶임. 직원 하나가 프로젝트 여럿, 프로젝트 하나에 직원 여럿. 선 위 M과 N. FK 칸 하나론 못 담아서 새 테이블 | |||
| Total participation | 그쪽 개체는 하나도 빠짐없이 관계에 들어감. 부서 없는 직원 없음. 사각형–마름모 선이 두 줄. 테이블에선 그 FK 칸이 안 빔 | |||
| Partial participation | 관계에 안 들어가는 개체가 있어도 됨. 관리자 아닌 직원 있음. 선이 한 줄. 테이블에선 그 칸이 NULL일 수 있음 | |||
| (min, max) | 개체 하나가 그 관계에 최소 몇 번, 최대 몇 번 들어가는지. 직원은 부서 관리를 0번 또는 1번 = (0,1), 부서는 관리자가 딱 1명 = (1,1). min 0이면 한 줄, min 1 이상이면 두 줄, max가 1이냐 N이냐가 위의 비율 | min ≥ 1 → NOT NULL / max 1 → FK 열 하나, max N → 새 테이블 | — | |
| Relationship attribute | 개체가 아니라 관계에 붙는 값. 근무 시간은 직원 것도 프로젝트 것도 아니고 "직원이 그 프로젝트에서" 일한 시간. 마름모에 매단 타원. 테이블에선 FK가 간 테이블로 따라감 | |||
| Recursive relationship | 한 entity type이 자기 자신과 맺는 관계. 직원이 직원을 감독. 마름모 양쪽 선이 같은 사각형으로 들어감. 테이블에선 자기 PK를 가리키는 FK | |||
| Role name | 한 관계에서 각 쪽이 맡는 역할 이름. 감독하는 쪽 supervisor, 받는 쪽 supervisee. 선 옆 글씨. 재귀는 양쪽 사각형이 같아서 이게 없으면 어느 선이 어느 쪽인지 모름 | FK 열 이름으로 남음 (Super_ssn) | — |
6. 약한 개체
| 개념 | 뜻 | ① ER | ② 스키마 | ③ 테이블 |
|---|---|---|---|---|
| Weak entity type | 자기 속성만으론 어느 개체인지 못 찍는 entity type. 부양가족 "Alice"는 여럿이라 누구 딸인지 알아야 함. 사각형 두 겹. 테이블로 가면 주인 PK 열이 붙음 | |||
| Owner | 약한 개체가 기대는 entity type. Alice의 직원. 두 겹 마름모 건너편 사각형. 그 PK가 약한 개체 테이블로 들어감 | Essn이 가리키는 EMPLOYEE | — | |
| Identifying relationship | 약한 개체를 주인과 이어 주는 관계. 마름모 두 겹, 약한 쪽 선은 항상 두 줄(주인 없는 부양가족 없음). 테이블은 따로 안 만들고 FK 열이 그 역할 | — | ||
| Partial key | 같은 주인 밑에서만 구분되는 속성. 한 직원의 부양가족끼린 이름 안 겹침. 타원에 점선 밑줄. 테이블 PK = 주인 PK + 이것 |
7. 관계형 모델 · 키 · 무결성
| 개념 | 뜻 | ① ER | ② 스키마 | ③ 테이블 |
|---|---|---|---|---|
| Relation | 테이블 하나. ER 사각형(이중 사각형 포함) 하나, M:N 마름모 하나, 이중 타원 하나가 각각 테이블 하나가 됨. 1:1·1:N 마름모, 이중 마름모, 재귀 마름모는 테이블 안 만들고 FK 열로 끝. relationship(마름모)이랑 이름 비슷한데 다른 말 | |||
| Relation schema | 테이블의 틀. 이름 + 열 이름. EMPLOYEE(Fname, …, Dno). ER에선 사각형 + 거기 매단 타원들, 스키마 그림이 이거, 테이블 그림에선 머리줄 | |||
| Relation state | 그 틀에 지금 들어 있는 행들. 행 넣고 빼면 바뀌지만 schema는 그대로. ER에선 사각형이 대표하는 entity set, 테이블 그림의 머리줄 아래 전부 | — | ||
| Tuple | 행 하나. 직원 한 명 = entity 하나, 또는 WORKS_ON 한 줄 = 관계 사실 하나 | 안 그림 (entity 하나 / relationship instance 하나) | — | |
| Domain | 그 열에 올 수 있는 값의 범위. Salary는 양의 정수. 범위 밖 값은 못 넣음. ER에선 속성의 value set | DDL에서 타입으로 | ||
| NULL | 칸에 값이 없음. 모르거나, 해당 안 되거나. 0이나 빈 문자열이 아님. 상사 없는 Borg의 Super_ssn. ER에서 min 0(한 줄)인 쪽이 NULL을 만듦 | — | ||
| Degree | 관계형에선 테이블 열 개수. 머리줄 상자 세면 됨. ER에선 가지 끝 타원 수 + 받아온 FK 수. ER의 degree(마름모에 붙은 사각형 수)랑 이름만 같고 다른 것 | |||
| Superkey | 그 열들 값이 같은 행이 둘 있을 수 없는 열 묶음. {Dnumber}도 되고 {Dnumber, Dname}처럼 군더더기 붙여도 됨 | 안 그림 | — | |
| Key | superkey 중 한 열이라도 빼면 superkey가 안 되는 것. {Dname}, {Dnumber} 각각. 여러 개면 전부 후보. ER에선 밑줄 타원 하나하나가 key | — | ||
| Primary key | 후보 중 테이블 대표로 고른 하나. Dnumber. 밑줄. 테이블에서 중복도 NULL도 없는 열 | 안 그림 (ER은 밑줄만 치고, 그중 하나를 스키마에서 고름) | ||
| Foreign key | 다른 테이블(또는 자기 테이블) PK 값을 담아서 그 행을 가리키는 열. EMPLOYEE.Dno = 5는 DEPARTMENT의 5번 행. 스키마에선 화살표. ER에선 1:N·1:1 마름모, 이중 마름모, 이중 타원, 재귀 마름모가 전부 FK가 됨 | |||
| PK이면서 FK | 남의 PK를 가져왔는데 그게 자기 PK의 일부이기도 한 열. WORKS_ON의 Essn, Pno는 M:N 마름모에서, DEPENDENT의 Essn은 이중 마름모에서 옴. 노랑+파랑 반반 | |||
| Key constraint | PK 값이 같은 행 두 개 금지. Ssn 123456789 직원 둘 못 넣음. ER에선 key 속성(밑줄 타원)이 개체마다 다르다는 뜻 | 밑줄 | ||
| Entity integrity | PK 칸은 NULL 금지. Ssn 빈 직원은 누군지 모르니까. ER에선 key 속성 없는 개체는 못 찍음 | 밑줄 열 | ||
| Referential integrity | FK 칸 값은 상대 테이블 PK에 실제 있는 값이거나 NULL. Dno = 7인데 7번 부서 없으면 위반. ER에선 마름모 건너편에 그 개체가 실제로 있어야 한다는 뜻 | 화살표 끝에 그 값 있어야 | ||
| 위반 검사 | 삽입은 Key·Entity·Referential 셋 다 봄. 삭제는 지우는 행을 남이 FK로 가리키는지만. 갱신은 삭제 + 삽입으로 보면 됨 | 안 그림 | — | 그림 ③ 오른쪽 아래 |