Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

duda con autoincrement i llave primaria

Estas en el tema de duda con autoincrement i llave primaria en el foro de Mysql en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original CREATE TABLE edificio (   id_edificio INT UNSIGNED NOT NULL AUTO_INCREMENT ,   codigo_edificio INT UNSIGNED NOT NULL , ...
  #1 (permalink)  
Antiguo 13/01/2011, 10:53
 
Fecha de Ingreso: febrero-2009
Mensajes: 443
Antigüedad: 15 años, 9 meses
Puntos: 1
duda con autoincrement i llave primaria

Código MySQL:
Ver original
  1. CREATE TABLE edificio
  2. (
  3.   codigo_edificio INT UNSIGNED NOT NULL,
  4.   descripcion_edificio VARCHAR(500) NOT NULL,
  5.   CONSTRAINT pk_edificio PRIMARY KEY (codigo_edificio)
  6. ) CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE = InnoDB;

Código MySQL:
Ver original
  1. INSERT INTO  edificio(codigo_edificio,descripcio_edificio) VALUES ('0','casa nueva');
  2. INSERT INTO  edificio(codigo_edificio,descripcio_edifico) VALUES ('1','casa vieja');
  3. INSERT INTO  edificio(codigo_edificio,descripcio_edifico) VALUES ('0','casa semi nueva');

hasta aquí va todo bien sale error porque el 1 i 3 insert utilizan el mismo numero y
es llave primaria


Código MySQL:
Ver original
  1. CREATE TABLE edificio
  2. (
  3.   codigo_edificio INT UNSIGNED NOT NULL,
  4.   descripcion_edificio VARCHAR(500) NOT NULL,
  5.   CONSTRAINT pk_edificio PRIMARY KEY (id_edificio,codigo_edificio)
  6. ) CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE = InnoDB;

en este caso tengo 2 llaves primarias y puedo poner los 3 insert sin ningún problema
codigo edificio no me tendría que dejar entrar el 3 insert

tengo que poner unique en codigo_edificio cuando hay 2 llaves primarias

id_edificio 1,2,3
codigo_edificio 0,1,0
descripcion_edificio casa nueva,casa vieja,casa semi nueva
  #2 (permalink)  
Antiguo 14/01/2011, 05:42
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: duda con autoincrement i llave primaria

No hay dos llaves primarias hay una llave primaria compuesta.

La llave primaria es unica por definición y sus valores tambien, no hace afalta agregar le un indice unico.

Si tus edificios solo pueden entar una vez lo que debes hacer es definir el codigo_edificio como clave primaria y no entrar edificios repetidos, o definir el codigo edificio como auto increment y no dar el valor en el momento de hacer un insert, ya pondra el el nuevo codigo...


Código MySQL:
Ver original
  1. CREATE TABLE edificio
  2. (
  3.   codigo_edificio INT UNSIGNED NOT NULL AUTO_INCREMENT,
  4.   descripcion_edificio VARCHAR(500) NOT NULL,
  5.   CONSTRAINT pk_edificio PRIMARY KEY (codigo_edificio)
  6. ) CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE = INNODB;

Código MySQL:
Ver original
  1. INSERT INTO  edificio(descripcio_edificio) VALUES ('casa nueva');

Si el codigo de edifico tiene alguna estructura especifica mas compleja puedes mantener el id_edficio como auto inc y PK y luego definir un indice unico sobre codigo_edificio

Código MySQL:
Ver original
  1. CREATE TABLE edificio
  2. (
  3.   codigo_edificio INT UNSIGNED NOT NULL,
  4.   descripcion_edificio VARCHAR(500) NOT NULL,
  5.   CONSTRAINT pk_edificio PRIMARY KEY (id_edificio)
  6.   CONSTRAINT UNIQUE INDEX index_codigo BTREE (codigo_edificio)
  7. ) CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE = INNODB;

En este ultimo caso el codigo_edificio incluso podria ser alfanumerico
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 15/01/2011, 02:14
 
Fecha de Ingreso: febrero-2009
Mensajes: 443
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: duda con autoincrement i llave primaria

id_edificio INT UNSIGNED NOT NULL AUTO_INCREMENT,
codigo_edificio INT UNSIGNED NOT NULL,

si pongo id_edificio va haciendo 1,2,3
es mejor que solo se puede hacer insert, update, select que no puede hacer delete para
no perder el orden correlativo 1,4,8

si utilizo id_edificio mas codigo_edifico
puedo hacer insert, update, delete i select en codigo_edificio y en id_edificio insert, update, select

o esta afirmación esta mal corregirme si me estoy confundiendo

codigo_edificio seria com el dni de la gente

o es mejor solo utilizar codigo_edificio porque ya tiene su propio identificador y en otras tablas que no tengo identificador hacer autoincrements

1
euro


2
dolar
$
  #4 (permalink)  
Antiguo 15/01/2011, 19:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: duda con autoincrement i llave primaria

Cita:
codigo_edificio seria com el dni de la gente
Si ese campo tiene un valor único e irrepetible, esa es la clave primaria de la tabla.
Usar claves numéricas autoincrementales debe solamente hacerse si al momento de normalizar las tablas, llegados a la 3FN no hay una clave candidata, o las posibles implican un conjunto de campos demasiado extenso.
De lo contrario se trata de una "trampa" fácil que eventualmente se pagará caro en las migraciones y las integraciones de datos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 28/06/2014, 14:16
 
Fecha de Ingreso: junio-2014
Mensajes: 1
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: duda con autoincrement i llave primaria

Totalmente de acuerdo con gnzsoloyo, pero agrego más.Cuando se utiliza un campo llave auto-incremental y ya existen en la tabla otros campos que pueden ser llave, entonces estamos violando la tercera forma normal porque existirán dependencias transitivas de atributos no primos con la llave primaria, es decir, hay atributos que no son llaves ni forman parte de la llave (en caso de llaves compuestas) que dependen funcionalmente de un atributo que no está definido como llave y este a su vez depende de la llave primaria.
En resumen, siempre que existan atributos que pueden ser llaves y se utilice una llave auto-incrmental estariamos violando la tercera forma normal.

Etiquetas: llave, primaria, autoincrementable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 12:31.