Database Modeling + Naming Rules

김기현·2022년 2월 10일
0
post-thumbnail

해본적은 있지만 생소한 단어였던 ERD! 대학 때 수업으로 다루어본 적도 있고, 그냥 눈으로 본 적도 있어서 꽤 익숙하다고 생각했는데.... 막상 ER 다이어그램을 만들어보니 막막했습니다 ㅋㅋ 그리고 부족한 부분도 많았고요!

그래서 ERD와 명명규칙을 정리해보겠습니다.

ERD

ER Diargram은 시스템의 엔티티들이 무엇이 있고 어떤 관계가 있는지를 나타내는 다이어그램으로 관계형 DB에서 많이 사용됩니다. 요소들과 속성들을 테이블과 컬럼들로 변환할 수 있고, 테이블과 관계들을 시각화할 수 있기 때문에 설계 문제점을 파악할 수 있습니다.

아래의 사진은 스타벅스 페이지를 모델링 한 것으로 이를 통해 개선해야 할 점들을 찾아보겠습니다. (아래 사진의 모델링은 오류를 포함하고 있습니다.)

메인 테이블은 여러 테이블과 서로 관계가 있는 테이블이기 때문에 중간으로 배치하는 것을 지향합니다.

Naming Rules

개발자들은 네이밍 방식을 정하는데 엄청난 노력을 기울일 것을 조언하는데요! 다음과 같은 약속된 룰이 있습니다.

테이블이름은 직관적으로 지어야 한다.

한눈으로 보아도 스타벅스의 음료를 뜻하는 테이블은 items보다는 drinksbeverages로 명명합니다.

추가적으로 약어는 지양합니다. 예를 들어 nutri_facts보다는 nutritions_facts로 명명합니다.

테이블이름은 복수로 정한다.

상단의 image테이블은 imagesallegyallergies로 변경합니다. 테이블은 요소들을 저장하는 곳이기 때문입니다.

Snake, Pascal, Camel Case를 구분해서 사용한다.

snake_case는 다른 단어들을 합쳐서 명명할 때 _(언더스코어)를 사용하고 소문자로 표현합니다.
PascalCase는 단어들을 합쳐서 명명할 때 전자 단어의 첫 알파벳과 후자 단어의 첫 알파벳을 대문자로 표현합니다.
camelCase는 다른 단어들을 합쳐서 명명하고 후자의 단어는 대문자로 표현합니다.

주로 class명은 PascalCase로, definition(함수)명은 snake_case로 주로 명명합니다.

images는 url 타입으로 저장한다.

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

아래는 해당 과제의 모범의 예시입니다.

profile
피자, 코드, 커피를 사랑하는 피코커

0개의 댓글