스타벅스 음료 데이터베이스

BackEnd_Ash.log·2020년 2월 17일
0

database

목록 보기
2/31

https://www.istarbucks.co.kr/menu/drink_list.do

스타벅스 음료에 대한 데이터베이스를 한번 설계를 해본다.
Category 테이블이름을 정한고
필드를 3개를 정한다
id int
type_id varchar
name varchar
이렇게 필드 3개를 만든다.

클릭하게 되면 음료에 대한 정보들이 나오게 된다.

================

이상하다.. 고칠곳이 한두곳이 아닌것같다.
일단 여기까지만 저장을 하고 다시 생각을 해봐야할것같다.

일단 용어에 대한 정리를 해야할 것 같다.

one to one

테이블 A의 로우와 테이블 B의 로우가 정확히 일대일 매칭되는 관계를 one to one 관계라고 한다.
국가와 수도의 경우를 생각해 보자.
한 국가당 수도는 하나다.
그러므로 국가와 수도는 one to one 관계를 가지고 있다.

one to many 관계

테이블 A의 로우가 테이블 B의 여러 로우와 연결되는 관계를
one to many 관계라고 한다.
미니터 api에서 사용자와 트윗이 one to many 관계이다.
하나의 사용자가 여러 트윗을 가질 수 있으므로 one to many 의 관계가 형성된다.

many to many 관계

테이블 A의 여러 로우가 테이블 B의 여러 로우와 연결되는 관계를
many to many 라고한다.
미니터 api 에서 사용자 사이에 팔로우하는 관계가 many to many 관계라고 한다.
한 사용자를 여러 사용자가 팔로우할 수 있고 ,
해당 사용자 또한 여러 사용자가 팔로우 할수 있기 때문이다.

잘 이해가 어려우면 학교를 예를 두면 ,

one - to - one

one - to - one 은
student_number 와 학생이라고 생각하면 된다.
이것은 학생번호 기준으로 봐도 학생은 한사람이고 ,
학생을 기준을 봐도 학생번호는 하나이다 .

one - to - many

one - to - many
컴퓨터 공학과 입장에서는 학생들이 여러명이니깐.
one - to - many 이다.
학생들 입장에서는 한 학생당 컴퓨터 공학이 하나니깐.
one - to - one 이 된다.

many - to - many

many - to - many 은
학생을 기준으로 봤을때 과목이 수학 영어 국어 이렇게 있다.
수학 기준으로 봤을때도 여러명의 학생들이 있을 수도 있다.
이럴 경우 many - to - many 관계라고 보면 된다.

from django.db import models


class Category(models.Model):
    name = models.CharField(max_length=50)

    class Meta:
        db_table = 'categories'


class DrinkCategory(models.Model):  # Category
    category_id = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True)
    name = models.CharField(max_length=50)

    class Meta:
        db_table = 'drink_categories'


class Drink(models.Model):  # beverage
    drink_category_id = models.ForeignKey(DrinkCategory, on_delete=models.SET_NULL, null=True)
    category_id = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True)
    name_en = models.CharField(max_length=100)
    name_kr = models.CharField(max_length=100)
    description = models.TextField(max_length=3000)
    thumbnail = models.URLField(max_length=500)
    allergy = models.CharField(max_length=100)
    serving = models.DecimalField(max_digits=4, decimal_places=1)
    calories = models.DecimalField(max_digits=5, decimal_places=1)
    saturated_fat = models.DecimalField(max_digits=4, decimal_places=1)
    protein = models.DecimalField(max_digits=4, decimal_places=1)
    sodium = models.DecimalField(max_digits=4, decimal_places=1)
    sugar = models.DecimalField(max_digits=5, decimal_places=1)
    caffeine = models.DecimalField(max_digits=5, decimal_places=1)

    class Meta:
        db_table = 'drinks'

ForeignKey

django 에서 다대일 관계를 설정할 때는 ForignKey 를 사용한다.
다른 필드 타입과 마찬가지로 모델 클래스의 속성으로 입력하며 , 연결대상이 될 모델 객체를 위치인자로 전달해주어야 하고 ,
on_delete 옵션을 필수로 입력해주어야 한다.

class 모델이름(models.Model):
    필드이름 = models.ForeignKey(연결대상모델, on_delete=삭제옵션)
# Customers Table
class Customer(models.Model):
    name = models.CharField(max_length=50)


# Orders Table
class Order(models.Model):
    customer = models.ForeignKey(Customer, on_delete=models.CASCADE)  # 외래키 설정
    product = models.CharField(max_length=50)

class ForeignKey(to , on_delete , **options)

다대일 관계이고 , 두 가지 위치 인수가 필요하다 .
모델이 관련된 클래스와 on_delete 옵션이다.

https://nachwon.github.io/django-relationship/

profile
꾸준함이란 ... ?

0개의 댓글