auto_increment y entidades débiles
Publicado por Juan Pablo (1 intervención) el 26/03/2007 15:29:30
Hola!! Tengo un problema
Tengo instalado MySQL Server 5.0 (5.0.27) en Windows XP y quiero crear un par de tablas para lo que debo utilizar estas sentencias sql:
CREATE TABLE cartera (
id_cart SMALLINT(5) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
CONSTRAINT cartera_pk PRIMARY KEY (id_cart)
);
Con esta tabla no hay ningún problema, pero ahora
CREATE TABLE operacion (
id_cart SMALLINT(5) UNSIGNED ZEROFILL NOT NULL,
id_operac SMALLINT(5) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
CONSTRAINT operacion_pk PRIMARY KEY (id_cart, id_operac),
CONSTRAINT operacion_fk FOREIGN KEY (id_cart) REFERENCES cartera (id_cart) ON DELETE CASCADE
);
y me sale el mensaje "Incorrect table definition; there can be only one auto column and it must be defined as a key"
Cumplo esa condición, e incluso en el manual hay un ejemplo idéntico que refleja lo que pretendo conseguir.
Lo que yo quiero obtener después, con esas definiciones y tras insertar tuplas, es una salida como esta
| id_cart | id_operac |
| 00001 | 00001 |
| 00001 | 00002 |
| 00002 | 00001 |
| 00003 | 00001 |
es decir, que para cada 'id_cart' la cuenta de autoincremento de 'id_operación' sea diferente, ya que he diseñado la base de datos de forma que operación es una entidad débil que depende de cartera y necesita su clave para la unicidad.
Si en la tabla 'operacion' cambio el orden de los atributos en PRIMARY KEY, es decir
CONSTRAINT operacion_pk PRIMARY KEY (id_operac, id_cart),
la tabla es creada sin problema alguno, pero la salida posterior no es lo que yo busco, sino
| id_cart | id_operac |
| 00001 | 00001 |
| 00001 | 00002 |
| 00002 | 00003 |
| 00003 | 00004 |
El autoincremento siempre suma sea cual sea la cartera en la que es insertada una operación, por lo que 'id_operacion' garantiza por si solo la unicidad y no necesitaría a 'id_cart'. Ya no sería una entidad debil
No sé si es algún problema de configuración de alguna opción, pero ya he probado varias con el MySQL Server Instance Config Wizard y también he deshabilitado (aunque no sea recomendable) el "Strict Mode", pero no he conseguido nada
Espero haber explicado bien mi problema.
Agradecería una solución. Gracias
Tengo instalado MySQL Server 5.0 (5.0.27) en Windows XP y quiero crear un par de tablas para lo que debo utilizar estas sentencias sql:
CREATE TABLE cartera (
id_cart SMALLINT(5) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
CONSTRAINT cartera_pk PRIMARY KEY (id_cart)
);
Con esta tabla no hay ningún problema, pero ahora
CREATE TABLE operacion (
id_cart SMALLINT(5) UNSIGNED ZEROFILL NOT NULL,
id_operac SMALLINT(5) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
CONSTRAINT operacion_pk PRIMARY KEY (id_cart, id_operac),
CONSTRAINT operacion_fk FOREIGN KEY (id_cart) REFERENCES cartera (id_cart) ON DELETE CASCADE
);
y me sale el mensaje "Incorrect table definition; there can be only one auto column and it must be defined as a key"
Cumplo esa condición, e incluso en el manual hay un ejemplo idéntico que refleja lo que pretendo conseguir.
Lo que yo quiero obtener después, con esas definiciones y tras insertar tuplas, es una salida como esta
| id_cart | id_operac |
| 00001 | 00001 |
| 00001 | 00002 |
| 00002 | 00001 |
| 00003 | 00001 |
es decir, que para cada 'id_cart' la cuenta de autoincremento de 'id_operación' sea diferente, ya que he diseñado la base de datos de forma que operación es una entidad débil que depende de cartera y necesita su clave para la unicidad.
Si en la tabla 'operacion' cambio el orden de los atributos en PRIMARY KEY, es decir
CONSTRAINT operacion_pk PRIMARY KEY (id_operac, id_cart),
la tabla es creada sin problema alguno, pero la salida posterior no es lo que yo busco, sino
| id_cart | id_operac |
| 00001 | 00001 |
| 00001 | 00002 |
| 00002 | 00003 |
| 00003 | 00004 |
El autoincremento siempre suma sea cual sea la cartera en la que es insertada una operación, por lo que 'id_operacion' garantiza por si solo la unicidad y no necesitaría a 'id_cart'. Ya no sería una entidad debil
No sé si es algún problema de configuración de alguna opción, pero ya he probado varias con el MySQL Server Instance Config Wizard y también he deshabilitado (aunque no sea recomendable) el "Strict Mode", pero no he conseguido nada
Espero haber explicado bien mi problema.
Agradecería una solución. Gracias
Valora esta pregunta


0