Diagrama de la Base de Datos

Arquitectura de la Base de Datos
El módulo se compone de tablas principales, tablas de subtipo y catálogos de apoyo para garantizar la normalización y flexibilidad.
Tabla Proveedor (Tabla Base)
Propósito
Almacenar la información común y compartida para todos los proveedores, como RFC, contacto y dirección. Actúa como la tabla padre para los distintos tipos de proveedor.
Campos Clave
Tabla ProveedorPersonaFisica
(Subtipo) Almacena datos exclusivos de proveedores que son personas físicas.
Campos
Tabla ProveedorPersonaMoral
(Subtipo) Almacena datos exclusivos de proveedores que son empresas.
Campos
Tabla ProveedorItem (Tabla de Unión)
Propósito
Gestionar la relación muchos-a-muchos (N:M) entre proveedores e ítems. Define qué producto ofrece cada proveedor y bajo qué condiciones comerciales.
Campos
Catálogos de Apoyo y Tablas Geográficas
Estas tablas normalizan la información, evitan la redundancia y aseguran la consistencia de los datos en todo el módulo.
Tabla ProveedorTipo
Clasifica a los proveedores para distinguir entre 'Persona Física' y 'Empresa'.
Campos
Tabla EntregaTipo
Estandariza los métodos de entrega disponibles (ej. 'Local', 'Mensajería').
Campos
Tabla Pais
Catálogo para almacenar los países.
Campos
Tabla Estado
Catálogo para los estados, vinculados a un país.
Campos
Tabla Municipio
Catálogo para los municipios, vinculados a un estado.
Campos
Normalización de la Base de Datos
1NF
Todos los atributos son atómicos y cada registro es único.
2NF
Se cumple al no tener dependencias parciales en tablas con claves compuestas como `ProveedorItem`.
3NF
Se eliminan dependencias transitivas al separar los datos de personas y empresas, y al usar catálogos (`ProveedorTipo`, `EntregaTipo`) para evitar redundancia.
Código SQL para Crear Tablas
-- Tablas de catálogo
CREATE TABLE dbo.ProveedorTipo (
Id_tipo_proveedor TINYINT IDENTITY(1,1) PRIMARY KEY,
nombre NVARCHAR(50) NOT NULL UNIQUE
);
CREATE TABLE dbo.EntregaTipo (
Id_tipo_entrega TINYINT IDENTITY(1,1) PRIMARY KEY,
nombre NVARCHAR(50) NOT NULL UNIQUE
);
GO
-- Tabla base
CREATE TABLE dbo.Proveedor (
Id_proveedor INT IDENTITY(1,1) PRIMARY KEY,
Id_tipo_proveedor TINYINT NOT NULL REFERENCES dbo.ProveedorTipo(Id_tipo_proveedor),
RFC VARCHAR(13) NULL UNIQUE,
telefono VARCHAR(25) NULL,
Id_municipio INT NULL -- FK a tabla geográfica
);
GO
-- Tablas de subtipo
CREATE TABLE dbo.ProveedorPersonaFisica (
Id_proveedor INT PRIMARY KEY REFERENCES dbo.Proveedor(Id_proveedor) ON DELETE CASCADE,
primer_nombre NVARCHAR(60) NOT NULL,
ap_paterno NVARCHAR(60) NOT NULL
);
CREATE TABLE dbo.ProveedorPersonaMoral (
Id_proveedor INT PRIMARY KEY REFERENCES dbo.Proveedor(Id_proveedor) ON DELETE CASCADE,
razon_social NVARCHAR(200) NOT NULL
);
GO
-- Tabla de unión
CREATE TABLE dbo.ProveedorItem (
Id_proveedor INT NOT NULL REFERENCES dbo.Proveedor(Id_proveedor),
Id_item VARCHAR(20) NOT NULL REFERENCES dbo.CatalogoItem(Id_item),
precio_unitario DECIMAL(12,2) NOT NULL,
Id_tipo_entrega TINYINT NOT NULL REFERENCES dbo.EntregaTipo(Id_tipo_entrega),
tiempo_entrega_dias INT NULL,
PRIMARY KEY (Id_proveedor, Id_item)
);
GO