20191117 TIL - 관계형 데이터의 모델링

kykevin·2019년 11월 17일
0

관계형 데이터의 모델링

이번주에 내가 했던일은 결국 모델 설계, 모델들 간의 관계설정, 그리고 크롤링이다. 이를 기억에 남기고자 글을 적는다.

관계 파악하기 및 그에따른 django 코딩

  • 이번 프로젝트는 air-bnb 클론이다. 이에 맞추어 데이터간의 관계를 알아보고자 한다.

    1. 1 to 1 : 회원(User)과 호스트(Host)의 관계
    • User 중에 숙소를 가진사람만 Host가 된다.
    • 한명의 User가 여러개의 Host_id를 가질 수는 없다.
    • 회원과 호스트의 관계는 1:1이다
    • 이경우에는 관계가 다음과 같이 표현된다.
      class Users(models.Model):
      		###
      class Hosts(models.Model):
          	###
          	host = OneToOneField(Users, on_delete = models.CASCADE)
       
      2. N to 1 : 숙소(Room)과 호스트(Host)의 관계
      - 숙소의 주인은 한명의 호스트이다.
      - 한명의 주인은 숙소를 여러개 운영할 수 있다.
      - 결론 : 숙소와 호스트는 N:1의 관계를 갖는다.
      - 그러면 django의 models.py에서는 다음과 같은 관계로 호스트와 숙소의 관계를 나타내게 된다.(앞의 코드에서 계속)
      ```python
    	class Rooms(models.Model):
      		###
        	  host = ForeignKey(Hosts, on_delete = models.CASCADE)
    1. N to N : 숙소(Room)와 편의 시설(Amenity)의 관계
    • 한 숙소는 여러가지 편의 시설을 가질 수 있다.(선풍기, 에어컨, 히터 등등)
    • 반대로 선풍기 편의시설을 가진 숙소또한 여러개 존재할 수 있다.
    • 결론 : 숙소와 편의시설은 N:N의 관계를 갖는다.
    • 이 관계를 표현하기 위해서는 JoinTable을 사용하여야 하며, 그를 위한 모델 또한 필요하다.
      class Rooms(models.Model):
      		###
        	  amenity = ManyToManyField(Amenity, through = 'RoomsAmenities')
      class Amenities(models.Model):
      		###
      class RoomsAmenities(models.Model):
          	###
              room = ForeignKey(Rooms, on_delete = models.CASCADE)
          	amenities = ForeignKey(Amenitiess, on_delete = models.CASCADE)
      
profile
Back-end Developer, pursuing to be a steadily improving person.

0개의 댓글