해본적은 있지만 생소한 단어였던 ERD! 대학 때 수업으로 다루어본 적도 있고, 그냥 눈으로 본 적도 있어서 꽤 익숙하다고 생각했는데.... 막상 ER 다이어그램을 만들어보니 막막했습니다 ㅋㅋ 그리고 부족한 부분도 많았고요!
그래서 ERD와 명명규칙을 정리해보겠습니다.
ER Diargram은 시스템의 엔티티들이 무엇이 있고 어떤 관계가 있는지를 나타내는 다이어그램으로 관계형 DB에서 많이 사용됩니다. 요소들과 속성들을 테이블과 컬럼들로 변환할 수 있고, 테이블과 관계들을 시각화할 수 있기 때문에 설계 문제점을 파악할 수 있습니다.
아래의 사진은 스타벅스 페이지를 모델링 한 것으로 이를 통해 개선해야 할 점들을 찾아보겠습니다. (아래 사진의 모델링은 오류를 포함하고 있습니다.)
메인 테이블은 여러 테이블과 서로 관계가 있는 테이블이기 때문에 중간으로 배치하는 것을 지향합니다.
개발자들은 네이밍 방식을 정하는데 엄청난 노력을 기울일 것을 조언하는데요! 다음과 같은 약속된 룰이 있습니다.
한눈으로 보아도 스타벅스의 음료를 뜻하는 테이블은 items
보다는 drinks
나 beverages
로 명명합니다.
추가적으로 약어는 지양합니다. 예를 들어 nutri_facts
보다는 nutritions_facts
로 명명합니다.
상단의 image
테이블은 images
로 allegy
는 allergies
로 변경합니다. 테이블은 요소들을 저장하는 곳이기 때문입니다.
snake_case
는 다른 단어들을 합쳐서 명명할 때 _
(언더스코어)를 사용하고 소문자로 표현합니다.
PascalCase
는 단어들을 합쳐서 명명할 때 전자 단어의 첫 알파벳과 후자 단어의 첫 알파벳을 대문자로 표현합니다.
camelCase
는 다른 단어들을 합쳐서 명명하고 후자의 단어는 대문자로 표현합니다.
주로 class
명은 PascalCase
로, definition
(함수)명은 snake_case
로 주로 명명합니다.
class AbstractItem(core_models.TimeStampedModel):
def total_rating(self):
all_reviews = self.reviews.all()
all_ratings = 0
if len(all_reviews) > 0:
for review in all_reviews:
all_ratings += review.rating_average()
return round(all_ratings / len(all_reviews), 2)
return 0