主键+多个主键的ID或varchar

时间:2018-03-11 18:04:31

标签: mysql database

下面的数据库有效,但我想知道它的设计是否可以改进(我不是专家)。例如:

1)DATOSREFERENCIAS表格是ID INT NOT NULL AUTO_INCREMENT而不是REFERENCIA VARCHAR(60) NOT NULL作为主键还是不相关?

2)在FASESREFERENCIAS表中,我不能有两个具有相同REFERENCIANUM_FASE的条目。你会在这里创建一个复合主键吗?我已经读过,如果可能的话,应该避免使用复合主键。

在这个数据库上运行的应用程序不允许输入不正确的数据,但我有兴趣学习如何设计一个好的数据库。

DROP TABLE IF EXISTS `gestiontransportes`.`CLIENTES`;
DROP TABLE IF EXISTS `gestiontransportes`.`FASESREFERENCIAS`;
DROP TABLE IF EXISTS `gestiontransportes`.`DATOSREFERENCIAS`;
DROP TABLE IF EXISTS `gestiontransportes`.`PROVEEDORFASE`;


CREATE TABLE `gestiontransportes`.`CLIENTES` ( 
    `ID` INT NOT NULL,          -- THIS ID IS HARDCODED, COPIED FROM THE ERP
    `CLIENTES` VARCHAR(60) NOT NULL, 
    `DIAS_TRANSITO` INT NOT NULL, 
    PRIMARY KEY (`ID`),         -- INT = DÍAS DE TRÁNSITO, 100 = LUNES, 200 = MARTES, 300 = MIÉRCOLES, 400 = JUEVES, 500 = VIERNES
    UNIQUE (`CLIENTES`)
) ENGINE = InnoDB COMMENT = 'Tabla para listar todos los clientes existentes';

CREATE TABLE `gestiontransportes`.`PROVEEDORFASE` ( 
    `ID` INT NOT NULL,          -- THIS ID IS HARDCODED, COPIED FROM THE ERP
    `PROVEEDORFASE` VARCHAR(100) NOT NULL, 
    `DIAS_PROCESAR` INT NOT NULL, 
    PRIMARY KEY (`ID`), 
    UNIQUE (`PROVEEDORFASE`)
) ENGINE = InnoDB COMMENT = 'Tabla para los datos maestros de las fases';

CREATE TABLE `gestiontransportes`.`DATOSREFERENCIAS` ( 
    `REFERENCIAS` VARCHAR(60) NOT NULL,  
    `IDCLIENTE` INT NOT NULL,
    `PESO_NETO` FLOAT NOT NULL,
    `CICLO_ESPERADO` FLOAT NOT NULL,
    `RENDIMIENTO` INT NOT NULL,
    PRIMARY KEY (`REFERENCIAS`),
    FOREIGN KEY (IDCLIENTE)
        REFERENCES PROVEEDORFASE(ID)
        ON DELETE CASCADE
) ENGINE = InnoDB COMMENT = 'Tabla para los datos maestros de las refs';

CREATE TABLE `gestiontransportes`.`FASESREFERENCIAS` (
    `ID` INT NOT NULL AUTO_INCREMENT,
    `REFERENCIA` VARCHAR(60) NOT NULL,
    `NUM_FASE` INT NOT NULL,    -- IDENTIFICA EL NÚMERO DE FASE COMO EN GESIN
    `FASE` INT NOT NULL,        -- IDENTIFICA PROVEEDORFASE
    `KG_MIN_ENVIAR` INT NOT NULL,
    `KG_MAX_ENVIAR` INT NOT NULL,
    PRIMARY KEY (`ID`), 
    FOREIGN KEY (REFERENCIA)
        REFERENCES DATOSREFERENCIAS(REFERENCIAS),
    FOREIGN KEY (FASE)
        REFERENCES PROVEEDORFASE(ID)
        ON DELETE CASCADE
) ENGINE = InnoDB COMMENT = 'Tabla para los datos maestros de las fases de las refs';

提前致谢,

1 个答案:

答案 0 :(得分:1)

通常,具有自动增量的ID字段是主要标准。强制你的条件在第二个表使用 唯一索引,并继续使用id feild作为主键。以后加入表格会容易得多。