SQL Server 테이블 설계: 피자 스토어 케이스 스터디

  • 6 minutes to read

피자 스토어 데이터베이스를 구축하는데 필요한 SQL Server 테이블 설계를 살펴보겠습니다. 이 아티클에서는 테이블 구조를 정의하고, 해당 구조를 이용해 Entity Framework Core(EF Core)와 ASP.NET Core MVC에 연동하는 방법을 소개하겠습니다.

SQL Server 테이블 생성 스크립트

피자 스토어 데이터베이스를 위한 테이블을 생성하는 SQL 스크립트입니다. 이 스크립트를 SQL Server에서 실행하여 필요한 테이블을 생성할 수 있습니다.

Sauces 테이블 생성

CREATE TABLE [Sauces] (
    [Id] int NOT NULL IDENTITY,
    [Name] nvarchar(100) NOT NULL,
    [IsVegan] bit NOT NULL,
    CONSTRAINT [PK_Sauces] PRIMARY KEY ([Id])
);

Toppings 테이블 생성

CREATE TABLE [Toppings] (
    [Id] int NOT NULL IDENTITY,
    [Name] nvarchar(100) NOT NULL,
    [Calories] decimal(18,2) NOT NULL,
    CONSTRAINT [PK_Toppings] PRIMARY KEY ([Id])
);

Pizzas 테이블 생성

CREATE TABLE [Pizzas] (
    [Id] int NOT NULL IDENTITY,
    [Name] nvarchar(100) NOT NULL,
    [SauceId] int NULL,
    CONSTRAINT [PK_Pizzas] PRIMARY KEY ([Id]),
    CONSTRAINT [FK_Pizzas_Sauces_SauceId] FOREIGN KEY ([SauceId]) REFERENCES [Sauces] ([Id])
);

PizzaTopping 테이블 생성

CREATE TABLE [PizzaTopping] (
    [PizzasId] int NOT NULL,
    [ToppingsId] int NOT NULL,
    CONSTRAINT [PK_PizzaTopping] PRIMARY KEY ([PizzasId], [ToppingsId]),
    CONSTRAINT [FK_PizzaTopping_Pizzas_PizzasId] FOREIGN KEY ([PizzasId]) REFERENCES [Pizzas] ([Id]) ON DELETE CASCADE,
    CONSTRAINT [FK_PizzaTopping_Toppings_ToppingsId] FOREIGN KEY ([ToppingsId]) REFERENCES [Toppings] ([Id]) ON DELETE CASCADE
);

이 스크립트를 SQL Server의 쿼리 창에서 실행하여 피자 스토어 데이터베이스에 필요한 테이블들을 생성할 수 있습니다.

테이블 구조 설명

1. Sauces 테이블

이 테이블은 피자에 사용되는 소스들을 저장합니다.

  • Id: 소스의 고유 번호입니다. 이 필드는 자동 증가하는 기본 키로 설정됩니다.
  • Name: 소스의 이름을 저장합니다.
  • IsVegan: 소스가 비건인지 여부를 나타냅니다. 비트(0 또는 1) 값으로 저장됩니다.

2. Toppings 테이블

피자 토핑에 대한 정보를 저장하는 테이블입니다.

  • Id: 토핑의 고유 번호입니다. 이 필드는 자동 증가하는 기본 키로 설정됩니다.
  • Name: 토핑의 이름을 저장합니다.
  • Calories: 해당 토핑의 칼로리를 저장합니다. 소수점 2자리까지 표현 가능합니다.

3. Pizzas 테이블

피자에 대한 정보를 저장하는 테이블입니다.

  • Id: 피자의 고유 번호입니다. 이 필드는 자동 증가하는 기본 키로 설정됩니다.
  • Name: 피자의 이름을 저장합니다.
  • SauceId: 해당 피자에 사용된 소스의 ID입니다. Sauces 테이블과 외래 키로 연결됩니다.

4. PizzaTopping 테이블

피자와 토핑의 관계를 나타내는 연결 테이블입니다.

  • PizzasId: 연결된 피자의 ID입니다.
  • ToppingsId: 연결된 토핑의 ID입니다.
  • 이 두 필드는 복합 기본 키로 사용됩니다. 이는 하나의 피자가 여러 토핑을 가질 수 있고, 하나의 토핑이 여러 피자에 사용될 수 있기 때문입니다.

EF Core 모델 생성

EF Core를 사용하여 데이터베이스와 연동하는 .NET 클래스를 생성합니다. 이를 위해 각 테이블에 해당하는 클래스를 정의하고, DbContext를 사용하여 이들을 연결합니다.

public class Sauce
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool IsVegan { get; set; }
}

public class Topping
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Calories { get; set; }
}

public class Pizza
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int? SauceId { get; set; }
    public Sauce Sauce { get; set; }
    public List<PizzaTopping> PizzaToppings { get; set; }
}

public class PizzaTopping
{
    public int PizzasId { get; set; }
    public Pizza Pizza { get; set; }
    public int ToppingsId { get; set; }
    public Topping Topping { get; set; }
}

public class PizzaStoreContext : DbContext
{
    public DbSet<Sauce> Sauces { get; set; }
    public DbSet<Topping> Toppings { get; set; }
    public DbSet<Pizza> Pizzas { get; set; }
    public DbSet<PizzaTopping> PizzaToppings { get; set; }

    // ...
}

ASP.NET Core MVC 연동

1. 서비스 등록

Startup.cs 파일에서 ConfigureServices 메서드를 사용하여 DbContext를 서비스에 등록합니다.

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<PizzaStoreContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("PizzaStoreConnection")));

    services.AddControllersWithViews();
}

2. 컨트롤러 및 뷰 생성

피자 스토어의 기능을 구현하기 위해 컨트롤러와 뷰를 생성합니다. 컨트롤러에서는 데이터베이스와의 상호작용을 처리하며, 뷰에서는 사용자 인터페이스를 제공합니다.

public class PizzaController : Controller
{
    private readonly PizzaStoreContext _context;

    public PizzaController(PizzaStoreContext context)
    {
        _context = context;
    }

    // Actions (e.g., Index, Details, Create, Edit, Delete) go here
}

뷰에서는 Razor 문법을 사용하여 데이터를 표시하고 사용자 입력을 처리합니다.

이상으로, SQL Server 테이블 설계를 바탕으로 한 피자 스토어 데이터베이스 구축과 EF Core 및 ASP.NET Core MVC와의 연동 방법에 대해 알아보았습니다. 이를 통해 효율적인 웹 애플리케이션 개발을 진행할 수 있습니다.

더 깊이 공부하고 싶다면
DevLec에서는 실무 중심의 C#, .NET, ASP.NET Core, Blazor, 데이터 액세스 강좌를 단계별로 제공합니다. 현재 수강 가능한 강좌 외에도 더 많은 과정이 준비되어 있습니다.
DevLec.com에서 자세한 커리큘럼을 확인해 보세요.
DevLec 공식 강의
C# Programming
C# 프로그래밍 입문
프로그래밍을 처음 시작하는 입문자를 위한 C# 기본기 완성 과정입니다.
ASP.NET Core 10.0
ASP.NET Core 10.0 시작하기 MVC Fundamentals Part 1 MVC Fundamentals Part 2
웹 애플리케이션의 구조와 MVC 패턴을 ASP.NET Core로 실습하며 익힐 수 있습니다.
Blazor Server
풀스택 웹개발자 과정 Part 1 풀스택 웹개발자 과정 Part 2 풀스택 웹개발자 과정 Part 3
실무에서 바로 활용 가능한 Blazor Server 기반 관리자·포털 프로젝트를 만들어 봅니다.
Data & APIs
Entity Framework Core 시작하기 ADO.NET Fundamentals Blazor Server Fundamentals Minimal APIs
데이터 액세스와 Web API를 함께 이해하면 실무 .NET 백엔드 개발에 큰 도움이 됩니다.
VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com