Modeling
데이터베이스에서의 entity들과 테이블들은 모델링 될 수 있는데, 이때 각 튜플에 해당하는 것들을 entity, entity들이 갖는 속성들은 그대로 attribute라고 하며, table은 entity set이라고 부릅니다.
예를 들어, 학생 DB에서 특정한 한 학생 Williams는 entity이며, 그 학생이 갖는 이름이나 핸드폰 번호는 attr.입니다.
Relationship sets
relationship은 몇몇개의 entity들의 관계를 말합니다. 이때 relationship set은 두 개 이상의 entities들로 구성된 관계들을 집합으로 나타낸 것입니다.
예를 들어 student ID가 44553인 Peltier와 instructor_ID가 22222인 Einstein이 advisor관계라면 다음의 그림같이 나타낼 수 있습니다:
이때 relationship set인 advisor는 (44553, 22222)인 요소를 갖는 집합입니다:
이를 그림으로 나타내면 다음과 같습니다:
E-R Diagrams
이를 모델링하여 그림으로 나타낸 것을 E-R Diagram이라고 부릅니다. 이는 사각형을 통해 entity set을, 마름모를 통해 relationship set을 표현하는 그림입니다. 이때 밑줄이 그어진 attr.은 primary key입니다:
이때 relationship set은 attr.을 가질 수 있습니다. 예를 들어 instructor와 student가 만난 날짜를 속성으로 가질 수도 있습니다. 이를 그림으로 나타내면 다음과 같습니다:
이를 E-R Diagram으로 표현하면 다음과 같습니다:
Degree of a Relationship set
물론 임의의 relation과 연결되어있는 entity set의 개수가 두 개 (binary relationship; degree two)만 가능한 것은 아닙니다. 하지만 대부분의 relationship은 binary이며, 두 개 이상인 경우는 희귀합니다.
예를 들어, 학생들이 연구하는 프로젝트와 학생들, 그 학생들을 관리하는 교수의 관계를 proj_guide라고 한다면, 이 relationship은 ternary relationship인 것입니다. *student entity set, project entity set, instructor entity set
Attributes
각 entity들은 attr.을 갖습니다. 이들 또한 Domain을 가질 수 있으며, attr.의 타입을 조금 더 디테일하게 표현할 수 있습니다:
- Simple and composite attr.; 그냥 하나의 간단한 속성과 여러 속성으로 나누어지는 속성
- Single-valued and multivalued attr.; 하나의 값만 나올 수 있는 속성과 여러 개의 값이 나올 수 있는 속성
- Ex: multivalued attribbute: phone_numbers; 한 명의 사람은 여러개의 핸드폰 번호를 가질 수도 있습니다.
- Derived attr.; 어떤 속성으로부터 파생되어 나올 수 있는 속성
- 임의의 속성으로부터 해당 속성의 값을 계산할 수 있는 경우입니다.
- Ex: date_of_birth가 주어졌을 때 age
아래의 그림은 composite attr.을 나타냅니다:
Mapping Cardinality Constraints
relation과 연결되어있는 entity들을 표현하는 경우 사용합니다. 일반적으로 binary relationship에서는 다음의 종류들을 따릅니다:
- One to one
- One to many
- Many to one
- Many to many
Mapping Cardinalities
*one to many 등은 하나도 연결되어 있지 않는 entity를 포함할 수도 있습니다.
keys
key개념은 DB와 같습니다. Super key는 임의의 entity를 unique하게 구분할 수 있는 attr. 집합을 말하며, Candidate key는 super key 집합중 가장 작은 집합을 말합니다. Primary key는 candidate key들중 선택한 하나입니다. 이를 다이어그램으로 나타내면 다음과 같습니다.
Keys for Relationship sets
일반적으로 relationship에 참여하는 entity set들의 primary key들의 조합은 super key 형태로 relationship set에서 사용됩니다. *하지만 candidate key는 안될 수도 있습니다. relationship set 자체에 attr.이 있는 경우 더 작은 개수를 갖는 집합으로 entity 들을 unique하게 구분할 수도 있기 때문입니다.
예를 들어, student entity set의 primary key가 student_id이고, instructor entity set의 primary key가 instructor_id일 때, (s_id, i_id)는 relationship set advisor의 super key가 됩니다.
Entity With Composite, Multivalued, and Derived Attributes
위 그림은 instructor entity set의 attr.입니다. 이를 하나하나 분석해보면 다음과 같습니다:
- ID; Primary key
- name; composite attribute *아래에 first_name, middle_name, last_name에 해당하는 attr.들이 존재하기 때문입니다.
- street_number; component attribute
- {phone_number}; multivalued attribute
- age(); derived attribute *derived attr.은 그 위에 있는 attr.을 통해 해당 attr.을 유도할 수 있다는 의미입니다.
Roles
이는 앞서 DB의 권한과 관련된 role과는 다른 뜻입니다. 어떤 entity set은 어떤 relationship에 있어서 role (역할)을 갖는 경우가 있습니다. 이를 E-R Diagram에서 표현할 수 있습니다.
예를 들어 같은 entity set과 연결된 relationship prereq가 있는 경우, 아래의 그림과 같이 나타낼 수 있는데
이때 각각의 연결선들은 relationship에 있어서 어떤 역할을 맡고 있는지를 알려줍니다. *참고로 role은 attr.가 아니어도 됩니다. 그냥 이해하기 쉽게 E-R Diagram에 써놓은 것입니다.
Cardinality Constraints
이런 cardinality에 대한 제약조건을 E-R 다이어그램에서는 화살표로 나타낼 수 있습니다. 방향이 있는 선의 경우(→) one을 의미하며, 방향이 없는 선의 경우(-) many를 의미합니다.
One-to-one Relationship
*참고로 one이나 many는 0을 포함합니다. 즉, 하나도 연결되지 않은 entity가 있을 수 있습니다.
One-to-many Relationship
Many-to-one Relationship
Many-to-many relationship
Participation of an Entity set in a relationship set
지금까지 봤던 relationship set은 partial participation이었습니다. 이는 임의의 entity는 해당 relationship에 참여하지 않아도 됨을 의미했습니다. 하지만 total participation은 entity set에 있는 모든 entity들은 해당 relationship에 참여해야함을 알려줍니다. 이는 선 두 개로 나타낼 수 있습니다.
section entity set의 경우 해당 entity들이 sec_course라는 관계에 모두 연결되어 있음을 알 수 있습니다.
Alternative Notation for Cardinality Limits
Cardinality를 다른 방법으로도 나타낼 수 있습니다. 이는 (최소 cardinality의 개수) .. (최대 cardinality의 개수) 로 표현할 수 있으며 다음과 같습니다.
instructor과 연결되어있는 0..*은 하나도 연결되어있지 않은 entitiy가 있을 수도 있고, 여러개의 entity들과 연결되는 entity가 있을 수도 있다는 의미로, 이는 앞서 봤던 many와 동일합니다. student와 연결되어있는 1..1은 최소 1개 최대 1개로, 모든 entity가 반드시 1개의 entity와 연결되어있어야함을 의미합니다. 이는 one과는 조금 다른데, one의 경우 0을 포함하기 때문에 위 표현식으로는 0..1입니다. 하지만 1..1은 "모든" entity가 참여함을 나타내기 때문에, total participation으로도 볼 수 있을 것 같습니다.
E-R Diagram with a Ternary Relationship
세 개의 entity set과 연결되는 relationship set을 ternary relationship이라고 하며, 그림으로 나타내면 다음과 같습니다:
Ternary relationship은 최대 하나의 →을 허용합니다. 예를 들어 proj_guide에서 instructor로 →가 있는 경우 이는 project와 student의 조합들 당 하나의 instructor를 배정한다는 것으로 해석할 수 있습니다. 하지만 →가 두 개 이상이 있는 경우는 해석에 모호함이 생깁니다.
*예를 들어 instructor에 →, student 에 →가 있는 경우, (project, instructor)가 student와 연결되는 것과 (project, student)가 instructor와 연결되는 것으로 해석에 모호함이 생길 수 있습니다.
따라서 Ternary relationship을 사용하는 경우는 →를 하나 이상 사용하는 것을 허용하지 않습니다.
Weak Entity Set
만약 primary key가 없는 entity set이 있는 경우 이를 weak entity set이라고 부릅니다. 이는 primary key를 갖고 있는 indentifying entity set (= strong entity set)의 primary key를 이용해 PK를 만들어야합니다. 이때 만들어지는 PK들의 요소들 중 weak entity set의 attr.들을 discriminator (or partial key)라고 부릅니다.
왜 이렇게 해야할까요?
만약 E-R Diagram을 DB로 구현하는 경우 PK가 없다면 table을 만들 수 없을 것입니다. 이때 indentifying entity set의 PK를 FK로 참조하여 PK를 만드는 것입니다. 이때 discriminator들을 E-R Diagram에서는 점선 밑줄로 나타냅니다.
이때 section의 PK는 (course_id, sec_id, semester, year)가 됩니다. *그렇다면 FK의 참조를 통해 PK를 만들지 말고 그냥 section에 course_id를 추가해서 PK를 설정하면 되지 않나? 아니다 그러면 relation을 만드는 이유가 없다..
'[학교 수업] > [학교 수업] Database' 카테고리의 다른 글
[Database] Normalization | Week 5 (0) | 2025.04.03 |
---|---|
[Database] Intermediate SQL | Week 4 (0) | 2025.03.25 |
[Database] Intermediate SQL | Week 3 (0) | 2025.03.21 |
[Database] Basic SQL | Week 3 (0) | 2025.03.19 |
[Database] Relational Model & Basic SQL | Week 2 (0) | 2025.03.11 |