AUTOINCREMENT clave primaria compuesta en migration

Hola, tengo una duda con relación a la clave primaria compuesta:

Si requiero hacer una clave primaria compuesta para migración, el típico $this->primaryKey() no me sirve ya que solo permite una sola columna, por lo que debo agregar $this->addPrimaryKey con las columnas para crear la clave primaria compuesta. El problema viene acá: cómo genero el autoincrement en una de esas columnas?

Muchas gracias.

Creo q no he entendido lo que quieres.

Qué significa migración?

Por otro lado, si vas a tener una columna autoincremental en una tabla (q por supuesto nunca va a estar repetida = va a ser única = es una clave primaria en toda regla), para que quieres una clave primaria compuesta? es un poco raro no?

Es q no tiene sentido que quieras añadir una columna a otra para hacerlas clave primaria cuándo la otra ya es una clave primaria en sí misma.

El objetivo de una clave primaria es identificar cada registro de una tabla de forma única, lo que consigues con un autoincremental en 1 única columna.

Igual no te he entendido bien.

Un saludo.

Puedes probar con algo así:




$this->createTable('tabla1', [

            'campo1' => $this->integer(),

            'campo2' => $this->integer()->autoIncrement(),

            'fecha' => $this->dateTime(),

            'PRIMARY KEY(campo1, campo2)',

        ]);



1 Like

En efecto así era, excepto que el método autoIncrement() no existe, por lo que simplemente lo reemplacé concatenando el AUTO_INCREMENT - algo que no sabía que se podía hacer porque en la documentación no está -

Es un mal concepto en diseño y diagramación de bases de datos asumir que una clave primaria es solo una columna con auto increment. Una clave primaria no es una columna con valores auto incrementables, es una columna o un conjunto de columnas (no necesariamente de tipo numérico) que identifican a una fila.

Buenas.

En primer lugar:

Qué es un autoincremental

Por otro lado.

Dices esto: "Es un mal concepto en diseño y diagramación de bases de datos asumir que una clave primaria es solo una columna con auto increment…". Bien, estoy de acuerdo contigo, pero es que yo en ningún momento he dicho esto. Simplemente he dicho que por sí solo un campo autoincremental es una clave primaria perfectamente válida, no que una clave primaria deba ser sí o sí un autoincremental.

Tú dices esto: "Una clave primaria no es una columna con valores auto incrementables, es una columna o un conjunto de columnas (no necesariamente de tipo numérico) que identifican a una fila…" que es lo mismo que digo yo: "El objetivo de una clave primaria es identificar cada registro de una tabla de forma única, lo que consigues con un autoincremental en 1 única columna". La última parte la escribo dentro del contexto que estamos hablando (o el que yo entendí), que es el de una tabla "maestra", es decir, una tabla que no enlaza a ninguna otra.

Las claves compuestas generalmente se usan para unir datos relacionados de 2(o más) tablas distintas (que por supuesto pueden tener como clave principal un autonumérico).

Un saludo.