HDP115

Diseño Físico de la Base de Datos.

Aprende a crear un modelo físico de base de datos, definiendo tipos de datos, índices y claves foráneas.

CE

Cristian Escalante

Última actualización: 19 de abril de 2025

sql
base de datos
sql
modelado

Diseño Físico de la Base de Datos.

Este modelo representa la implementación real de la base de datos (Mysql, Posgresql, etc.) Aquí se definen los tipos exactos de las propiedades, además de las claves primarias y foráneas.

El modelo físico es donde la teoría se convierte en realidad. Aquí se definen los tipos de datos específicos para cada columna, las restricciones de integridad, los índices y otros aspectos técnicos que afectan el rendimiento y la eficiencia de la base de datos.

Hay que tener en cuenta lo siguiente:

  • Tipos de Datos: Definir el tipo de dato para cada columna (INT, VARCHAR, DATE, etc.).
  • Índices: Crear índices para mejorar el rendimiento de las consultas.
  • Claves Foráneas: Definir las relaciones entre tablas mediante claves foráneas.
  • Restricciones: Establecer restricciones de integridad, como NOT NULL, UNIQUE, etc.
  • Normalización: Asegurarse de que la base de datos esté normalizada para evitar redundancias y mejorar la integridad de los datos.

Definición de tablas exactas

CREATE TABLE sucursal (
    id_sucursal INT PRIMARY KEY AUTO_INCREMENT,
    nombre VARCHAR(50) NOT NULL,
    direccion VARCHAR(100),
    telefono VARCHAR(15),
    ciudad VARCHAR(50) DEFAULT 'San Salvador'
) ENGINE=InnoDB;

Tipos de datos precisos

Se especifican con exactitud los tipos de datos según el SGBD:

ColumnaTipo en Modelo LógicoTipo en Físico (MySQL)Razón
precioDECIMAL(10,2)DECIMAL(12,2)Permitir valores mayores
teléfonoVARCHAR(20)VARCHAR(15)Formatos internacionales
fecha_ventaDATEDATETIMERegistrar hora exacta

Indices para Optimización

-- Índice para búsquedas frecuentes por marca
CREATE INDEX idx_auto_marca ON auto(marca);

-- Índice compuesto para consultas de ventas por fecha
CREATE INDEX idx_venta_fecha_cliente ON venta(fecha, id_cliente);

DDL

-- Tabla Sucursal
CREATE TABLE sucursal (
    id_sucursal INT PRIMARY KEY AUTO_INCREMENT,
    nombre VARCHAR(50) NOT NULL,
    direccion VARCHAR(100) NOT NULL,
    telefono VARCHAR(15),
    capacidad INT CHECK (capacidad > 0)
) ENGINE=InnoDB;

-- Tabla Vendedor
CREATE TABLE vendedor (
    id_vendedor INT PRIMARY KEY AUTO_INCREMENT,
    nombre VARCHAR(100) NOT NULL,
    comision DECIMAL(5,2) DEFAULT 2.5,
    id_sucursal INT NOT NULL,
    fecha_contratacion DATE,
    FOREIGN KEY (id_sucursal) REFERENCES sucursal(id_sucursal)
        ON DELETE CASCADE
) ENGINE=InnoDB;

-- Tabla Auto
CREATE TABLE auto (
    id_auto INT PRIMARY KEY AUTO_INCREMENT,
    vin VARCHAR(17) UNIQUE NOT NULL,  -- Número de chasis
    marca VARCHAR(30) NOT NULL,
    modelo VARCHAR(50) NOT NULL,
    año SMALLINT CHECK (año BETWEEN 1900 AND YEAR(CURDATE()) + 1),
    precio DECIMAL(12,2) NOT NULL,
    color VARCHAR(30),
    id_sucursal INT NOT NULL,
    FOREIGN KEY (id_sucursal) REFERENCES sucursal(id_sucursal)
) ENGINE=InnoDB;

-- Tabla Cliente
CREATE TABLE cliente (
    id_cliente INT PRIMARY KEY AUTO_INCREMENT,
    nombre VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE,
    telefono VARCHAR(15),
    direccion TEXT
) ENGINE=InnoDB;

-- Tabla Venta
CREATE TABLE venta (
    id_venta INT PRIMARY KEY AUTO_INCREMENT,
    fecha_hora DATETIME DEFAULT CURRENT_TIMESTAMP,
    monto_total DECIMAL(12,2) NOT NULL,
    forma_pago ENUM('Contado', 'Crédito', 'Leasing') NOT NULL,
    id_cliente INT NOT NULL,
    id_vendedor INT NOT NULL,
    id_auto INT NOT NULL,
    FOREIGN KEY (id_cliente) REFERENCES cliente(id_cliente),
    FOREIGN KEY (id_vendedor) REFERENCES vendedor(id_vendedor),
    FOREIGN KEY (id_auto) REFERENCES auto(id_auto)
) ENGINE=InnoDB;

1.3. Índices para Optimización

Diseño Lógico de la Base de Datos.
Aprende a crear un modelo lógico de base de datos, definiend...

Conceptos Básicos de HTML

Aprende los conceptos básicos de HTML

Conceptos Básicos de CSS

Aprende los conceptos básicos de CSS

Conceptos Básicos de JavaScript

Aprende los conceptos básicos de JavaScript

Conceptos Básicos de GIT

Aprende los conceptos básicos de GIT

Conceptos Básicos de Python

Aprende los conceptos básicos de Python

Refuerzo Academico de Herramientas de Productividad 2025