Creación de Base de Datos para Restaurante

Aquí crearás tu primer base de datos completamente funcional.

🧩 Introducción

Cuando hablamos de desarrollar una base de datos, la clave está en planificar antes de escribir una sola línea de código. Así como un artista necesita un lienzo antes de pintar, nosotros necesitamos un Diagrama de Entidad-Relación para visualizar y estructurar nuestro sistema de información.

En esta guía, te mostraré cómo crear una base de datos funcional para un restaurante, paso a paso, utilizando SQL Server. Este proceso es aplicable a cualquier negocio que desees modelar, ya sea una papelería, una tienda de abarrotes, o cualquier otro tipo de establecimiento.

🗂️ Paso 1: Identificar los Objetos de la Entidad (Tablas)

Para comenzar, debemos preguntarnos: ¿Qué necesita un restaurante para funcionar? A partir de esta pregunta, identificamos las entidades principales que se convertirán en nuestras tablas:

1. Clientes

Los clientes son la razón de ser del negocio. Son las personas que vienen a disfrutar de la experiencia gastronómica con amigos o familiares.

2. Empleados

Meseros, cocineros, cajeros, lavaplatos... todos ellos forman parte del equipo que hace posible la operación y brinda servicio al cliente.

3. Mesas

Bonitas, elegantes y bien ubicadas. Las mesas son el espacio físico donde los clientes disfrutarán sus alimentos y bebidas.

4. Productos (Platillos y Bebidas)

El plato principal de nuestro sistema: los alimentos y bebidas que los clientes van a degustar. Se organizan por categorías como entradas, platos fuertes, bebidas y postres.

5. Inventario/Insumos

Todo negocio necesita llevar control de sus insumos. Esta tabla nos permitirá gestionar el stock de ingredientes necesarios para preparar nuestros platillos.

6. Proveedores

Los socios estratégicos que proporcionan los mejores productos al mejor precio.

7. Reservaciones

Permiten a los clientes asegurar su lugar sin tener que hacer fila de espera. Aquí gestionamos el estado de cada reserva.

8. Órdenes

Registra las transacciones principales cuando los clientes deciden comenzar a degustar.

9. Detalle de Órdenes

El proceso de pedido es dinámico: los clientes pueden agregar más platillos durante la comida. Esta tabla almacena cada línea de detalle hasta que se cierra la cuenta.

Paso 2: Diagrama de Entidad-Relación (DER)

Una vez identificados los objetos, es momento de dibujar nuestro lienzo. El Diagrama de Entidad-Relación nos permite visualizar:

  • Entidades (tablas)
  • Atributos (columnas)
  • Relaciones (llaves foráneas)

Estructura de Tablas

Entonces, con base en estos objetos, podemos definir nuestras tablas de la siguiente manera:

Cliente

Campo Tipo Descripción
ClienteID INT (PK) Identificador único del cliente
Nombre NVARCHAR(100) Nombre completo del cliente
Teléfono NVARCHAR(20) Número de contacto
Correo NVARCHAR(100) Correo electrónico
Dirección NVARCHAR(200) Dirección física

Empleado

Campo Tipo Descripción
EmpleadoID INT (PK) Identificador único del empleado
Nombre NVARCHAR(100) Nombre completo del empleado
Rol NVARCHAR(50) Mesero, cocinero, cajero, etc.
Teléfono NVARCHAR(20) Número de contacto
FechaContratación DATE Fecha de ingreso del empleado

Mesa

Campo Tipo Descripción
MesaID INT (PK) Identificador único de la mesa
Número INT Número de mesa
Capacidad INT Número máximo de ocupantes
Ubicación NVARCHAR(100) Área del restaurante

Producto

Campo Tipo Descripción
ProductoID INT (PK) Identificador único del producto
Nombre NVARCHAR(100) Nombre del platillo o bebida
Descripción NVARCHAR(200) Detalles del producto
Precio DECIMAL(10,2) Precio unitario
Categoría NVARCHAR(50) Entrada, plato fuerte, bebida, postre

Proveedor

Campo Tipo Descripción
ProveedorID INT (PK) Identificador único del proveedor
Nombre NVARCHAR(100) Razón social
Teléfono NVARCHAR(20) Número de contacto
Correo NVARCHAR(100) Correo electrónico
Dirección NVARCHAR(200) Dirección física

Inventario

Campo Tipo Descripción
InventarioID INT (PK) Identificador único del registro
ProductoID INT (FK) Referencia al producto
ProveedorID INT (FK) Referencia al proveedor
CantidadDisponible INT Stock actual
UltimaActualizacion DATETIME Fecha del último cambio

Reservación

Campo Tipo Descripción
ReservacionID INT (PK) Identificador único
FechaHora DATETIME Fecha y hora de la reserva
ClienteID INT (FK) Referencia al cliente
MesaID INT (FK) Referencia a la mesa
CantidadPersonas INT Número de comensales
Estado NVARCHAR(50) Pendiente, confirmada, cancelada

Orden

Campo Tipo Descripción
OrdenID INT (PK) Identificador único
FechaHora DATETIME Fecha y hora de la orden
ClienteID INT (FK) Referencia al cliente
MesaID INT (FK) Referencia a la mesa
EmpleadoID INT (FK) Referencia al empleado que atiende
Total DECIMAL(10,2) Monto total de la orden

DetalleOrden

Campo Tipo Descripción
DetalleID INT (PK) Identificador único
OrdenID INT (FK) Referencia a la orden
ProductoID INT (FK) Referencia al producto
Cantidad INT Cantidad de unidades
PrecioUnitario DECIMAL (10,2) Precio al momento de la orden
Subtotal DECIMAL(10,2) Cálculo automático (Cantidad x PrecioUnitario)

Finalmente, así es como queda nuestro diagrama de Entidad Relación:

Diagrama de Entidad Relación

Paso 3: Creación de la Base de Datos en MSSQL Server

Ahora pasamos a la parte técnica. Abrimos una nueva consulta en SQL Server Management Studio y comenzamos a escribir nuestro script usando T-SQL.

1.- Creación de la Base de Datos

Aquí les comparto 2 formas de hacerlo...

  • Script Simple:
    CREATE DATABASE Restaurant_BD;
  • Script con Parámetros:
    -- Crear base de datos
    CREATE DATABASE Restaurant_BD ON (
        Name = RestaurantDB_dat,
        Filename = 'E:\sql\DATA\RestaurantDB.mdf',
        Size = 10,
        MaxSize = 1024,
        FileGrowth = 5
        )
    LOG ON (
        Name = RestaurantDB_log,
        Filename = 'E:\sql\LOGS\RestaurantDB.ldf',
        Size = 5MB,
        MaxSize = 100MB,
        FileGrowth = 5MB
        );
    GO
    -- Indicamos al Manejador de Base de Datos que ahora utilice la nueva Base de Datos
    USE Restaurant_BD;
    GO
                                
  • ¿Qué hace este script con parámetros?

  • Primero crea a base de datos Restaurant_BD
  • Luego especifica los archivos físicos que la forman:
    • Archivo de datos RestaurantBD.mdf con un tamaño inicial de 10 MB
    • Archivo de log RestaurantBD.ldf con un tamaño inicial de 5 MB

2.- Creación de las tablas

Siguiendo las definiciones mostradas anteriormente, podemos crear los scripts para cada tabla de la siguiente manera:

  • Cliente
    CREATE TABLE Cliente (
        ClienteID INT PRIMARY KEY IDENTITY,
        Nombre NVARCHAR(100),
        Telefono NVARCHAR(20),
        Correo NVARCHAR(100),
        Direccion NVARCHAR(200)
    );
  • Mesa
    CREATE TABLE Mesa (
        MesaID INT PRIMARY KEY IDENTITY,
        Numero INT,
        Capacidad INT,
        Ubicacion NVARCHAR(100)
    );
  • Empleado
    CREATE TABLE Empleado (
        EmpleadoID INT PRIMARY KEY IDENTITY,
        Nombre NVARCHAR(100),
        Rol NVARCHAR(50),
        Telefono NVARCHAR(20),
        FechaContratacion DATE
    );
  • Producto
    CREATE TABLE Producto (
        ProductoID INT PRIMARY KEY IDENTITY,
        Nombre NVARCHAR(100),
        Descripcion NVARCHAR(200),
        Precio DECIMAL(10,2),
        Categoria NVARCHAR(50)
    );
  • Proveedor
    CREATE TABLE Proveedor (
        ProveedorID INT PRIMARY KEY IDENTITY,
        Nombre NVARCHAR(100),
        Telefono NVARCHAR(20),
        Correo NVARCHAR(100),
        Direccion NVARCHAR(200)
    );
  • Orden
    CREATE TABLE Orden (
        OrdenID INT PRIMARY KEY IDENTITY,
        FechaHora DATETIME,
        ClienteID INT FOREIGN KEY REFERENCES Cliente(ClienteID),
        MesaID INT FOREIGN KEY REFERENCES Mesa(MesaID),
        EmpleadoID INT FOREIGN KEY REFERENCES Empleado(EmpleadoID),
        Total DECIMAL(10,2)
    );
  • DetalleOrden
    CREATE TABLE DetalleOrden (
        DetalleID INT PRIMARY KEY IDENTITY,
        OrdenID INT FOREIGN KEY REFERENCES Orden(OrdenID),
        ProductoID INT FOREIGN KEY REFERENCES Producto(ProductoID),
        Cantidad INT,
        PrecioUnitario DECIMAL(10,2),
        Subtotal AS (Cantidad * PrecioUnitario) PERSISTED
    );

    Nota: Subtotal es una columna calculada que se genera automáticamente.

  • Reservacion
    CREATE TABLE Reservacion (
        ReservacionID INT PRIMARY KEY IDENTITY,
        FechaHora DATETIME,
        ClienteID INT FOREIGN KEY REFERENCES Cliente(ClienteID),
        MesaID INT FOREIGN KEY REFERENCES Mesa(MesaID),
        CantidadPersonas INT,
        Estado NVARCHAR(50)
    );
  • Inventario
    CREATE TABLE Inventario (
        InventarioID INT PRIMARY KEY IDENTITY,
        ProductoID INT FOREIGN KEY REFERENCES Producto(ProductoID),
        ProveedorID INT FOREIGN KEY REFERENCES Proveedor(ProveedorID),
        CantidadDisponible INT,
        UltimaActualizacion DATETIME
    );

Paso 4: Relaciones entre Tablas

Una base de datos relacional se caracteriza por las conexiones entre sus tablas. Aquí un resumen de las relaciones implementadas:

Tabla Llave Foránea Tabla Referenciada
Orden ClienteID Cliente
Orden MesaID Mesa
Orden EmpleadoID Empleado
DetalleOrden OrdenID Orden
DetalleOrden ProductoID Producto
Reservacion ClienteID Cliente
Reservacion MesaID Mesa
Inventario ProcutoID Producto
Inventario ProveedorID Proveedor

Conceptos Fundamentales Aplicados

¿Qué es una Llave Primaria (PK)?

Es el identificador único de cada registro en una tabla. En nuestro diseño, usamos IDENTITY para que SQL Server genere automáticamente valores secuenciales.

¿Qué es una Llave Foránea (FK)?

Es un campo que establece una relación entre dos tablas. Por ejemplo, Orden.ClienteID referencia a Cliente.ClienteID, conectando una orden con su cliente correspondiente.

Columnas Calculadas

DetalleOrden.Subtotal es una columna calculada que automáticamente multiplica Cantidad × PrecioUnitario, evitando cálculos manuales y reduciendo errores.

Tipos de Datos Comunes

  • INT: Números enteros.
  • NVARCHAR(n): Texto variable con soporte Unicode
  • DECIMAL(p,s): Números decimales con precisión definida
  • DATETIME: Fecha y hora
  • DATE: Solo fecha

Consejos para Extender tu Base de Datos

La belleza del diseño de bases de datos es que puede ser tan simple o complejo como el proyecto lo requiera. Aquí algunas ideas para expandirla:

  • Agregar más categorías de productos
  • Implementar un sistema de promociones y descuentos
  • Gestionar turnos y horarios de empleados
  • Registrar pagos y métodos de pago
  • Añadir control de costos y márgenes de ganancia

Conclusión

En unos cuantos pasos hemos construido una base de datos funcional para un restaurante desde cero. Lo importante es que el diseño sea coherente, útil y escalable. Este mismo enfoque puede aplicarse a cualquier tipo de negocio: papelerías, tiendas de abarrotes, clínicas, etc.

Principios Clave para Recordar:

  • Planifica antes de programar: El Diagrama Entidad-Relación es tu lienzo.
  • Identifica todas las entidades que interactúan en tu negocio.
  • Define relaciones claras entre tus tablas.
  • Elige tipos de datos adecuados para cada campo.
  • Considera el crecimiento futuro al diseñar tu estructura.

La teoría te da fundamentos sólidos que, si dominas, te permitirán generar scripts y código de manera fácil y eficiente. No subestimes el valor de aprender los conceptos básicos; ellos son los cimientos de todo buen desarrollador.

⬆ Volver al Inicio

🎬 ¿Quieres verlo en acción?

Te invito a ver este video tutorial donde explico paso a paso la creación de esta base de datos con un enfoque más dinámico y coloquial:
"Crea tu primer Base de Datos, Una Base de Datos Feliz al estilo Bob Ross"

🔗 Ver en YouTube