BuffetApp 데이터베이스
국수, 국물, 고명 이름으로 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'이 사용자의 선택을 어떻게 처리하고 있는지 명확히 알 수 있습니다. 이러한 구조는 향후 재료의 추가 및 관리도 용이하게 할 수 있습니다.