BuffetApp 데이터베이스

  • 8 minutes to read

국수, 국물, 고명 이름으로 3개의 테이블 생성 및 관계 설정

다음은 데브렉에서 서비스 중인 현재 아티클에 대한 유료 동영상 강의입니다.

'BuffetApp' 테이블 설계 및 예제 데이터

개요

'BuffetApp'은 사용자가 다양한 국물, 국수, 그리고 고명을 조합하여 자신만의 라면 또는 국수를 구성할 수 있도록 지원하는 애플리케이션입니다. 이 데이터베이스 설계는 사용자가 선택할 수 있는 다양한 재료를 효과적으로 관리하기 위한 테이블 구조를 제안합니다. 이 스크립트는 'BuffetApp' 데이터베이스에서 국물, 국수, 고명에 대한 정보를 저장하는 테이블들을 생성하는 데 초점을 맞추고 있습니다.

데이터베이스 구조 설명

이번 데이터베이스 설계는 세 개의 주요 테이블로 구성됩니다: Broths (국물), Noodles (국수), 그리고 Garnishes (고명). 각 테이블은 관련된 재료 정보를 저장하며, 이를 통해 사용자는 자신이 원하는 대로 다양한 조합을 만들어낼 수 있습니다.

1. 국물 테이블 (Broths)

Broths 테이블은 다양한 국물의 정보를 저장합니다. 각 국물은 Id, Name, 그리고 IsVegan 속성을 가집니다. Id는 기본 키로 사용되며, 자동으로 증가하는 Identity 열입니다. Name은 국물의 이름을 저장하는 문자열 열이며, IsVegan은 해당 국물이 비건 옵션인지 여부를 나타내는 논리형 값입니다.

Create Table Broths (
	[Id] Int Not Null Identity, 
	[Name] NVarChar(100) Not Null,
	[IsVegan] Bit Not Null,
	Constraint [PK_Broths] Primary Key ([Id])
);
  • Id: 국물의 고유 식별자입니다.
  • Name: 국물의 이름을 저장합니다 (예: 멸치, 김치 등).
  • IsVegan: 해당 국물이 비건 옵션인지 여부를 나타냅니다 (1이면 비건, 0이면 비비건).

2. 국수 테이블 (Noodles)

Noodles 테이블은 다양한 국수의 정보를 저장합니다. 이 테이블은 Id, Name, 그리고 BrothId 속성을 가집니다. BrothId는 해당 국수가 어떤 국물과 어울리는지에 대한 외래 키입니다. 이 관계를 통해 국물과 국수 간의 연관성을 설정할 수 있습니다.

Create Table Noodles (
	[Id] Int Not Null Identity, 
	[Name] NVarChar(100) Not Null,
	[BrothId] Int Null,
	Constraint [PK_Noodles] Primary Key ([Id]),
	Constraint [FK_Noodles_Broths_BrothId] Foreign Key ([BrothId]) References [Broths] ([Id])
);
  • Id: 국수의 고유 식별자입니다.
  • Name: 국수의 이름을 저장합니다 (예: 라면, 우동 등).
  • BrothId: 해당 국수가 어떤 국물과 어울리는지를 나타내는 외래 키로, Broths 테이블의 Id와 참조 관계를 맺습니다.

3. 고명 테이블 (Garnishes)

Garnishes 테이블은 다양한 고명의 정보를 저장합니다. 이 테이블은 Id, Name, 그리고 NoodleId 속성을 가집니다. NoodleId는 고명이 특정 국수와 어울릴 때 그 관계를 설정하기 위해 사용됩니다. 이를 통해 고명과 국수 간의 연관성을 설정할 수 있습니다.

Create Table Garnishes (
	[Id] Int Not Null Identity, 
	[Name] NVarChar(100) Not Null,
	[NoodleId] Int Null,
	Constraint [PK_Garnishes] Primary Key ([Id]),
	Constraint [FK_Garnishes_Noodles_NoodleId] Foreign Key ([NoodleId]) References [Noodles] ([Id])
);
  • Id: 고명의 고유 식별자입니다.
  • Name: 고명의 이름을 저장합니다 (예: 파, 계란, 김 등).
  • NoodleId: 해당 고명이 어떤 국수와 어울리는지를 나타내는 외래 키로, Noodles 테이블의 Id와 참조 관계를 맺습니다.

예제 데이터 삽입

데이터베이스 구조가 완성되었으므로, 이제 예제 데이터를 삽입해보겠습니다. 이 데이터는 'BuffetApp'이 실제로 어떤 방식으로 데이터를 관리하고 사용자가 선택할 수 있는 재료를 저장하는지를 보여줍니다.

국물 데이터 삽입

Insert Into Broths (Name, IsVegan)
Values 
('사골', 0),
('멸치', 0),
('된장', 1),
('김치', 1);

국수 데이터 삽입

Insert Into Noodles (Name, BrothId)
Values 
('라면', 1),  -- 사골 국물과 어울리는 라면
('칼국수', 2),  -- 멸치 국물과 어울리는 칼국수
('냉면', 3),  -- 된장 국물과 어울리는 냉면
('쌀국수', 4); -- 김치 국물과 어울리는 쌀국수

고명 데이터 삽입

Insert Into Garnishes (Name, NoodleId)
Values 
('파', 1),      -- 라면과 어울리는 파
('계란', 2),    -- 칼국수와 어울리는 계란
('김', 3),      -- 냉면과 어울리는 김
('숙주', 4);    -- 쌀국수와 어울리는 숙주

데이터 조회

삽입된 데이터를 조회하여, 각 국수와 그에 어울리는 국물, 그리고 고명을 확인할 수 있습니다.

국수와 국물의 조합 조회

Select 
    N.Name as NoodleName, 
    B.Name as BrothName, 
    B.IsVegan
From 
    Noodles N
Inner Join 
    Broths B 
On 
    N.BrothId = B.Id;

이 쿼리는 각 국수와 그에 어울리는 국물의 이름과 비건 여부를 표시합니다.

국수와 고명의 조합 조회

Select 
    N.Name as NoodleName, 
    G.Name as GarnishName
From 
    Garnishes G
Inner Join 
    Noodles N 
On 
    G.NoodleId = N.Id;

이 쿼리는 각 국수와 그에 어울리는 고명의 이름을 표시합니다.

전체 스크립트

마지막으로, 전체 스크립트를 하나의 파일로 요약하겠습니다.

파일: Buffets.sql

Use BuffetApp
Go

-- 국물 테이블 생성
Create Table Broths (
	[Id] Int Not Null Identity, 
	[Name] NVarChar(100) Not Null,
	[IsVegan] Bit Not Null,
	Constraint [PK_Broths] Primary Key ([Id])
);

-- 국수 테이블 생성
Create Table Noodles (
	[Id] Int Not Null Identity, 
	[Name] NVarChar(100) Not Null,
	[BrothId] Int Null,
	Constraint [PK_Noodles] Primary Key ([Id]),
	Constraint [FK_Noodles_Broths_BrothId] Foreign Key ([BrothId]) References [Broths] ([Id])
);

-- 고명 테이블 생성
Create Table Garnishes (
	[Id] Int Not Null Identity, 
	[Name] NVarChar(100) Not Null,
	[NoodleId] Int Null,
	Constraint [PK_Garnishes] Primary Key ([Id]),
	Constraint [FK_Garnishes_Noodles_NoodleId] Foreign Key ([NoodleId]) References [Noodles] ([Id])
);

-- 국물 데이터 삽입
Insert Into Broths (Name, IsVegan)
Values 
('사골', 0),
('멸치', 0),
('된장', 1),
('김치', 1);

-- 국수 데이터 삽입
Insert Into Noodles (Name, BrothId)
Values 
('라면', 1),
('칼국수', 2),
('냉면', 3),
('쌀국수', 4);

-- 고명 데이터 삽입
Insert Into Garnishes (Name, NoodleId)
Values 
('파', 1),
('계란', 2),
('김', 3),
('숙주', 4);

-- 국수와 국물의 조합 조회
Select 
    N.Name as NoodleName, 
    B.Name as BrothName, 
    B.IsVegan
From 
    Noodles N
Inner Join 
    Broths B 
On 
    N.BrothId = B.Id;

-- 국수와 고명의 조합 조회
Select 
    N.Name as NoodleName, 
    G.Name as GarnishName
From 
    Garnishes G
Inner Join 
    Noodles N 
On 
    G.NoodleId = N.Id;

결론

이 데이터베이스 설계는 다양한 재료(국물, 국수, 고명)를 관리하여 사용자가 자신만의 조합을 구성할 수 있도록 지원합니다. 예제 데이터를 삽입하고 조회하는 과정을 통해 'BuffetApp'이 사용자의 선택을 어떻게 처리하고 있는지 명확히 알 수 있습니다. 이러한 구조는 향후 재료의 추가 및 관리도 용이하게 할 수 있습니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com