Sesión #1

Duración 4 horas 6:00am - 11:00am

Se comenzó por analizar la especificación y realizar dibujos a mano tratando de realizar el diseño.

Se realizaron varias versiones y se decidió por el siguiente diseño:


Este creemos que es el indicado dada la especificación y la importancia que tiene la cuenta maestra en todo el proyecto, siendo para nosotros el centro del proyecto.

Los creates de el diagrama son: 

CREATE TABLE TipoCuentaMaestra (
    id INT PRIMARY KEY IDENTITY(1,1),
    nombre_tipo_tcm VARCHAR(16) NOT NULL
);


CREATE TABLE TipoMovimiento (
    id INT PRIMARY KEY IDENTITY(1,1),
    nombre_tipo_movimiento VARCHAR(64) NOT NULL,
    accion VARCHAR(16) NOT NULL  -- Débito o Crédito
);


CREATE TABLE MotivoInvalidacionTarjeta (
    id INT PRIMARY KEY IDENTITY(1,1),
    nombre_motivo VARCHAR(32) NOT NULL
);

CREATE TABLE UsuarioAdministrador (
    id INT PRIMARY KEY IDENTITY(1,1),
    nombre_usuario VARCHAR(64) NOT NULL,
    password VARCHAR(128) NOT NULL
);

CREATE TABLE TipoDocumento (
    id INT PRIMARY KEY IDENTITY(1,1),
    nombre_tipo_documento VARCHAR(64) NOT NULL,
    formato VARCHAR(32) NOT NULL
);

CREATE TABLE TipoReglasNegocio (
    id INT PRIMARY KEY IDENTITY(1,1),
    nombre VARCHAR(64) NOT NULL,
    tipo VARCHAR(16) NOT NULL
);

CREATE TABLE Tarjetahabiente (
    id INT PRIMARY KEY IDENTITY(1,1),
    nombre VARCHAR(128) NOT NULL,
    id_tipo_documento INT,
    documento_identidad VARCHAR(32) NOT NULL UNIQUE,
    nombre_usuario VARCHAR(64) NOT NULL,
    password VARCHAR(128) NOT NULL,
    FOREIGN KEY (id_tipo_documento) REFERENCES TipoDocumento(id)
);

CREATE TABLE CuentaTarjetaMaestra (
    id INT PRIMARY KEY IDENTITY(1,1),
    codigo_tcm VARCHAR(32) NOT NULL UNIQUE,
    tipo_tcm INT,  -- Referencia a catálogo
    limite_credito DECIMAL(18,2) NOT NULL,
    saldo_actual DECIMAL(18,2) NOT NULL DEFAULT 0,
    id_th INT NOT NULL,  -- Relación con Tarjetahabiente
    fecha_creacion DATE NOT NULL,
    FOREIGN KEY (id_th) REFERENCES Tarjetahabiente(id),
    FOREIGN KEY (tipo_tcm) REFERENCES TipoCuentaMaestra(id)
);

CREATE TABLE CuentaTarjetaAdicional (
    id INT PRIMARY KEY IDENTITY(1,1),
    codigo_tca VARCHAR(32) NOT NULL UNIQUE,
    id_tcm INT NOT NULL,  -- Relación con Cuenta Maestra
    id_th INT NOT NULL,  -- Relación con Tarjetahabiente que usa la TCA
    FOREIGN KEY (id_tcm) REFERENCES CuentaTarjetaMaestra(id),
    FOREIGN KEY (id_th) REFERENCES Tarjetahabiente(id)
);

CREATE TABLE TarjetaFisica (
    id INT PRIMARY KEY IDENTITY(1,1),
    numero_tarjeta VARCHAR(16) NOT NULL UNIQUE,
    cvv VARCHAR(4) NOT NULL,
    fecha_vencimiento DATE NOT NULL,
    id_tca INT,  -- Puede estar asociada a una TCA o TCM
    id_tcm INT,
    estado VARCHAR(16) NOT NULL DEFAULT 'Activa',  -- Activa o No Activa
    FOREIGN KEY (id_tca) REFERENCES CuentaTarjetaAdicional(id),
    FOREIGN KEY (id_tcm) REFERENCES CuentaTarjetaMaestra(id)
);

CREATE TABLE Movimiento (
    id INT PRIMARY KEY IDENTITY(1,1),
    id_tf INT NOT NULL,  -- Relación con Tarjeta Física
    fecha_movimiento DATETIME NOT NULL,
    tipo_movimiento INT,  -- Referencia a catálogo
    monto DECIMAL(18,2) NOT NULL,
    descripcion VARCHAR(256),
    referencia VARCHAR(64),
    FOREIGN KEY (id_tf) REFERENCES TarjetaFisica(id),
    FOREIGN KEY (tipo_movimiento) REFERENCES TipoMovimiento(id)
);

CREATE TABLE ReglaNegocio (
    id INT PRIMARY KEY IDENTITY(1,1),
    tipo_regla INT,  -- Referencia a catálogo
    tipo_tcm VARCHAR(16) NOT NULL,  -- Corporativo, Oro, Platino
    limite_credito_max DECIMAL(18,2) NOT NULL,
    tasa_interes_mensual DECIMAL(5,2) NOT NULL,
    tasa_interes_mora DECIMAL(5,2) NOT NULL,
    cargo_servicio_tcm DECIMAL(10,2) NOT NULL,
    cargo_servicio_tca DECIMAL(10,2) NOT NULL,
    plazo_meses INT NOT NULL,
    FOREIGN KEY (tipo_regla) REFERENCES TipoReglasNegocio(id)
);

CREATE TABLE InteresCorriente (
    id INT PRIMARY KEY IDENTITY(1,1),
    id_tcm INT NOT NULL,  -- Relación con Cuenta Maestra
    fecha_operacion DATE NOT NULL,
    monto_interes DECIMAL(18,2) NOT NULL,
    FOREIGN KEY (id_tcm) REFERENCES CuentaTarjetaMaestra(id)
);

CREATE TABLE InteresMoratorio (
    id INT PRIMARY KEY IDENTITY(1,1),
    id_tcm INT NOT NULL,  -- Relación con Cuenta Maestra
    fecha_operacion DATE NOT NULL,
    monto_interes DECIMAL(18,2) NOT NULL,
    FOREIGN KEY (id_tcm) REFERENCES CuentaTarjetaMaestra(id)
);

CREATE TABLE EstadoCuenta (
    id INT PRIMARY KEY IDENTITY(1,1),
    id_tcm INT NOT NULL,  -- Relación con Cuenta Maestra
    fecha_corte DATE NOT NULL,
    saldo_actual DECIMAL(18,2) NOT NULL,
    pago_minimo DECIMAL(18,2) NOT NULL,
    pago_contado DECIMAL(18,2) NOT NULL,
    intereses_corrientes DECIMAL(18,2) NOT NULL,
    intereses_moratorios DECIMAL(18,2) NOT NULL,
    FOREIGN KEY (id_tcm) REFERENCES CuentaTarjetaMaestra(id)
);



En la siguiente sesión se trabajará con la conexión entre estas tablas y el servidor.


Comentarios

Entradas más populares de este blog

Sesion #14