De nuevo excepción en modifición BD (integridad)
Como te decía antes... Pff! Ya la hemos preparado! Lo que me temía!
Uso MySQL Server 5.0, he cambiado la definición de las tablas para crearlas de tipo InnoDB como me dijiste, y hay una que no me deja crearla. Te escribo su definición (es un poco larga, je je)
CREATE TABLE operacion (
Id_usuario VARCHAR(12) NOT NULL,
id_cartera VARCHAR(12) NOT NULL,
id_operacion SMALLINT(5) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
nombre VARCHAR(50) NOT NULL,
fecha DATE NOT NULL,
tipo_operac ENUM ('Compra', 'Venta', 'Split', 'Absorcion', 'Cobro dividendos', 'Obsequio') NOT NULL,
empr_absorbida VARCHAR(50) NULL,
num_titulos SMALLINT UNSIGNED NULL,
num_tit_nuevos SMALLINT UNSIGNED NULL,
num_tit_antiguos SMALLINT UNSIGNED NULL,
prec_unit DOUBLE(7,3) UNSIGNED NULL,
efect_total DOUBLE(11,3) UNSIGNED NULL,
reintegr_unit DOUBLE(7,3) UNSIGNED NULL,
reintegr_total DOUBLE(11,3) UNSIGNED NULL,
dvdo_unit DOUBLE(7,3) UNSIGNED NULL,
dvdo_total DOUBLE(11,3) UNSIGNED NULL,
benef_perd DOUBLE(10,3) NULL,
objetivo_operac DOUBLE(5,2) UNSIGNED NULL,
stop_perd_operac DOUBLE(4,2) UNSIGNED NULL,
riesgo_operac ENUM ('Muy alto', 'Alto', 'Medio', 'Bajo', 'Muy bajo') NULL,
saldo_tit_operac SMALLINT NULL,
CONSTRAINT operacion_pk PRIMARY KEY (id_usuario, id_cartera, id_operacion),
CONSTRAINT operacion_fk1 FOREIGN KEY (id_usuario, id_cartera) REFERENCES cartera (id_usuario, id_cartera),
CONSTRAINT operacion_fk2 FOREIGN KEY (nombre) REFERENCES empresa (nombre)
) ENGINE = INNODB;
Al ejecutarlo, me da el fallo "Incorrect table definition; there can be only one auto
column and it must be defined as a key"
La definición tiene que ser así, es lo que necesito. Tengo una tabla USUARIO que almacena la información de los usuarios (con "id_usuario" como primary key), una tabla CARTERA que almacena la información de las carteras de forma que se sepa a qué usuario pertenece cada una (con "id_usuario" y "id_cartera" como primary key), y en esta tabla que quiero crear almaceno la información de las operaciones de forma que se sepa a qué cartera, que a su vez pertenece a un usuario, pertenece cada una (por lo tanto, con "id_usuario", "id_cartera" y "id_operacion" como primary key). Para diferenciar unas operaciones de otras, dentro de la misma cartera de un mismo usuario, me resulta muy útil el auto increment, pero... Ya ves que no me deja!, y es imposible que la defina como única primary key dado mi modelo de datos.
En su momento consulte este problema y me dieron como solución hacer la tabla de tipo
MyIsam, y ahora tú me pides que la haga InnoDB para que me funcione lo de la integridad. ¿Qué hago? ¿Cómo soluciono con tabla InnoDB el error que tengo con el auto increment? Y eso suponiendo que no me surjan más problemas al manejar triggers u otro tipo de cosas con el nuevo tipo de tabla!
Uso MySQL Server 5.0, he cambiado la definición de las tablas para crearlas de tipo InnoDB como me dijiste, y hay una que no me deja crearla. Te escribo su definición (es un poco larga, je je)
CREATE TABLE operacion (
Id_usuario VARCHAR(12) NOT NULL,
id_cartera VARCHAR(12) NOT NULL,
id_operacion SMALLINT(5) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
nombre VARCHAR(50) NOT NULL,
fecha DATE NOT NULL,
tipo_operac ENUM ('Compra', 'Venta', 'Split', 'Absorcion', 'Cobro dividendos', 'Obsequio') NOT NULL,
empr_absorbida VARCHAR(50) NULL,
num_titulos SMALLINT UNSIGNED NULL,
num_tit_nuevos SMALLINT UNSIGNED NULL,
num_tit_antiguos SMALLINT UNSIGNED NULL,
prec_unit DOUBLE(7,3) UNSIGNED NULL,
efect_total DOUBLE(11,3) UNSIGNED NULL,
reintegr_unit DOUBLE(7,3) UNSIGNED NULL,
reintegr_total DOUBLE(11,3) UNSIGNED NULL,
dvdo_unit DOUBLE(7,3) UNSIGNED NULL,
dvdo_total DOUBLE(11,3) UNSIGNED NULL,
benef_perd DOUBLE(10,3) NULL,
objetivo_operac DOUBLE(5,2) UNSIGNED NULL,
stop_perd_operac DOUBLE(4,2) UNSIGNED NULL,
riesgo_operac ENUM ('Muy alto', 'Alto', 'Medio', 'Bajo', 'Muy bajo') NULL,
saldo_tit_operac SMALLINT NULL,
CONSTRAINT operacion_pk PRIMARY KEY (id_usuario, id_cartera, id_operacion),
CONSTRAINT operacion_fk1 FOREIGN KEY (id_usuario, id_cartera) REFERENCES cartera (id_usuario, id_cartera),
CONSTRAINT operacion_fk2 FOREIGN KEY (nombre) REFERENCES empresa (nombre)
) ENGINE = INNODB;
Al ejecutarlo, me da el fallo "Incorrect table definition; there can be only one auto
column and it must be defined as a key"
La definición tiene que ser así, es lo que necesito. Tengo una tabla USUARIO que almacena la información de los usuarios (con "id_usuario" como primary key), una tabla CARTERA que almacena la información de las carteras de forma que se sepa a qué usuario pertenece cada una (con "id_usuario" y "id_cartera" como primary key), y en esta tabla que quiero crear almaceno la información de las operaciones de forma que se sepa a qué cartera, que a su vez pertenece a un usuario, pertenece cada una (por lo tanto, con "id_usuario", "id_cartera" y "id_operacion" como primary key). Para diferenciar unas operaciones de otras, dentro de la misma cartera de un mismo usuario, me resulta muy útil el auto increment, pero... Ya ves que no me deja!, y es imposible que la defina como única primary key dado mi modelo de datos.
En su momento consulte este problema y me dieron como solución hacer la tabla de tipo
MyIsam, y ahora tú me pides que la haga InnoDB para que me funcione lo de la integridad. ¿Qué hago? ¿Cómo soluciono con tabla InnoDB el error que tengo con el auto increment? Y eso suponiendo que no me surjan más problemas al manejar triggers u otro tipo de cosas con el nuevo tipo de tabla!
1 Respuesta
Respuesta
1