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와의 연동 방법에 대해 알아보았습니다. 이를 통해 효율적인 웹 애플리케이션 개발을 진행할 수 있습니다.

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