Mysql 主键的ID或varchar+;多主键
下面的数据库工作正常,但我想知道它的设计是否可以改进(我不是专家)。例如: 1)Mysql 主键的ID或varchar+;多主键,mysql,database,Mysql,Database,下面的数据库工作正常,但我想知道它的设计是否可以改进(我不是专家)。例如: 1) datosreferenceas表的主键应该是ID INT NOT NULL AUTO_INCREMENT而不是referenceia VARCHAR(60)NOT NULL,还是不相关 2) 在fasesreferenceas表中,我不能有两个具有相同referencea和NUM\u FASE的条目。你会在这里创建一个复合主键吗?我读过,如果可能的话,应该避免使用复合主键 在这个数据库上运行的应用程序不允许输入错
datosreferenceas
表的主键应该是ID INT NOT NULL AUTO_INCREMENT
而不是referenceia VARCHAR(60)NOT NULL
,还是不相关
2) 在fasesreferenceas
表中,我不能有两个具有相同referencea
和NUM\u 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';
提前感谢,通常,具有自动递增功能的ID feilds是主键标准。要在第二个表中强制执行您的条件,请使用
唯一索引,并继续使用id字段作为主键。以后连接表时要容易得多 我不知道你的具体情况,但我不知道有任何禁止复合主键的规定。