SQL - auto_increment y entidades débiles

 
Vista:

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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:auto_increment y entidades débiles

Publicado por Gonzalo (5 intervenciones) el 26/03/2007 16:31:09
Según uno de los comentarios que hay en el manual, esto sólo funciona si la tabla es de tipo myisam. Prueba añadiéndole el indicador de tipo:

CREATE TABLE operacion (
...
) type=myisam;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar