
비즈니스 룰은 특정 조직이 운영되기 위해 따라야 하는 정책, 절차, 원칙에 대한 간단 명료한 설명입니다. 예를 들어, 온라인 쇼핑몰 코팡의 비즈니스 룰을 생각해보면 다음과 같은 정책들을 정할 수 있습니다:
비즈니스 룰은 데이터 모델링의 핵심 기반이 되기 때문에, 기획자는 최대한 간단명료하게 만들고, 개발자는 이를 정확하게 이해하는 것이 중요합니다.
비즈니스 룰이 있을 때, Entity, Attribute, Relationship을 찾는 기본 원칙은 다음과 같습니다:
위 원칙을 사용하여 비즈니스 룰에서 ERM 초안을 만들 수 있습니다. 예를 들어, 코팡의 비즈니스 룰을 기반으로 하면 다음과 같이 ERM을 만들 수 있습니다:
기본 원칙에는 예외가 있습니다. 하나의 값으로 표현할 수 있더라도, 하나의 Entity가 여러 개의 값을 가져야 하는 경우입니다. 예를 들어, 한 유저가 여러 개의 주소를 가질 수 있습니다. 이 경우, 주소를 컬럼으로 나누기보다는 새로운 테이블(Entity)로 만들어야 합니다. 이렇게 하면 NULL이 많이 생기지 않고, 조회가 비효율적이지 않게 됩니다.
카디널리티는 두 Entity Type 사이 관계에서 한 종류의 Entity가 다른 종류의 Entity 몇 개에 대해서 관계를 맺을 수 있는지를 나타내는 개념입니다.
1:1 관계는 A Entity 하나가 B Entity 하나에만 연결될 수 있는 관계입니다. 예를 들어, 법적 부부 관계나 시민과 주민등록증 관계가 있습니다.
1:N 관계는 A Entity 하나가 B Entity 여러 개에 연결될 수 있고, B Entity는 A Entity 하나에만 연결될 수 있는 관계입니다. 예를 들어, 쇼핑몰 사이트에서 유저와 평가의 관계, 선생님과 수업의 관계가 있습니다.
M:N 관계는 A Entity 하나가 B Entity 여러 개에 연결될 수 있고, B Entity 하나도 A Entity 여러 개에 연결될 수 있는 관계입니다. 예를 들어, 유저와 상품 사이 찜하기 관계, 학생과 수업의 수강 관계가 있습니다.
최대 카디널리티 외에 최소 카디널리티도 중요합니다. 최소 카디널리티는 특정 관계에서 각 Entity가 하나도 없어도 되는지, 아니면 최소한 하나가 있어야 하는지를 나타냅니다.
카디널리티는 비즈니스 룰을 통해 결정됩니다. 예를 들어, 유저와 프로필 Entity가 있을 때, 페이스북에서는 유저가 하나의 프로필만 갖기 때문에 1:1 관계가 있고, 넷플릭스에서는 유저가 여러 개의 프로필을 가질 수 있기 때문에 1:N 관계가 있습니다.
ERM에서 카디널리티를 표현할 때, "일"에 해당하는 Entity 쪽에는 수직선을 사용하고, "다"에 해당하는 Entity 쪽에는 선 세 개를 사용합니다. 최소 카디널리티는 최대 카디널리티보다 선 안쪽에 표시합니다.
ERM을 사용하여 데이터베이스 구조를 파악할 수 있습니다. 이를 통해 데이터의 흐름을 직관적으로 파악하고, 데이터베이스를 설명하거나 파악할 때 유용하게 사용할 수 있습니다.
1:1 관계에서는 둘 중 하나, 또는 둘 다에 Foreign Key를 추가합니다. 예를 들어, 코팡에서 한 유저는 하나의 결제용 카드만 등록할 수 있습니다. 이때 Foreign Key를 추가하여 관계를 표현합니다. 카드는 유저가 없어도 되지만, 유저는 항상 카드가 있어야 하므로 card 테이블에 Foreign Key를 추가합니다.
1:N 관계에서는 다수 쪽에 Foreign Key를 추가합니다. 예를 들어, 한 유저는 여러 개의 평가를 가질 수 있지만, 하나의 평가는 하나의 유저만 가질 수 있습니다. 이때 Foreign Key를 review 테이블에 추가하여 관계를 표현합니다.
M:N 관계에서는 연결 테이블(Junction Table)을 사용합니다. 예를 들어, 코팡의 유저는 여러 개의 상품을 찜할 수 있고, 상품도 여러 유저에게 찜받을 수 있습니다. 이때 연결 테이블을 만들어 Foreign Key를 추가하여 관계를 표현합니다.
ERM은 데이터베이스 구조를 만들 때뿐만 아니라, 이미 사용 중인 데이터베이스를 파악하는 데도 사용할 수 있습니다. 예를 들어, 코팡 데이터베이스를 ERM으로 표현하면, 데이터의 흐름과 관계를 직관적으로 파악할 수 있습니다. 이를 통해 데이터베이스를 설명하거나 파악할 때 유용하게 사용할 수 있습니다.