Modelo funcional y reglas de negocio
Convenciones y estructura general

Convenciones y estructura general de la base

Convenciones físicas

El esquema editorial de Interdrugs utiliza las siguientes convenciones:

  • nombres de tablas en snake_case y minúsculas;
  • nombres de campos en camelCase;
  • clave primaria id INT AUTO_INCREMENT;
  • fechaCreacion y fechaModificacion en las tablas del modelo;
  • relaciones mediante campos idXxx;
  • claves foráneas reales para las relaciones estructurales;
  • InnoDB;
  • utf8mb4 con collation utf8mb4_unicode_ci.

Ejemplo:

CREATE TABLE productos (
    id INT NOT NULL AUTO_INCREMENT,
    nombre VARCHAR(255) NOT NULL,
    idLaboratorio INT NOT NULL,
    activo TINYINT(1) NOT NULL DEFAULT 1,
    fechaCreacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    fechaModificacion DATETIME NOT NULL
        DEFAULT CURRENT_TIMESTAMP
        ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id)
);

Base editorial y bases compiladas

La base editorial contiene el modelo normalizado utilizado por el backoffice.

Las aplicaciones no necesitan consumir directamente toda esa estructura.

BASE EDITORIAL
     |
     | publicar / compilar
     v
BASES COMPILADAS
     |
     v
API / GO / CLIENTES

Las bases compiladas son derivadas y pueden ser regeneradas.

Relaciones

Las relaciones estructurales se implementan mediante claves foráneas.

Esto además permite que los generadores PHP detecten las relaciones y generen las asociaciones correspondientes en las entidades Doctrine.

Las reglas que dependen del tipo de registro y no pueden expresarse mediante una FK simple se validan en backend.

Ejemplo: drogas_contenidos.idDroga referencia entidades_farmacologicas.id, pero además el backend debe verificar que esa entidad sea de tipo DROGA.

Borrado lógico

Cuando una tabla posee el campo activo, la desactivación debe preferirse al borrado físico cuando sea necesario conservar referencias o historial.

Las tablas históricas, como extensiones de invitaciones y control editorial, no deben utilizarse como registros descartables.