下面的数据库有效,但我想知道它的设计是否可以改进(我不是专家)。例如:
1)DATOSREFERENCIAS
表格是ID INT NOT NULL AUTO_INCREMENT
而不是REFERENCIA VARCHAR(60) NOT NULL
作为主键还是不相关?
2)在FASESREFERENCIAS
表中,我不能有两个具有相同REFERENCIA
和NUM_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';
提前致谢,
答案 0 :(得分:1)
通常,具有自动增量的ID字段是主要标准。强制你的条件在第二个表使用 唯一索引,并继续使用id feild作为主键。以后加入表格会容易得多。