Soy un poco novato y no puedo conseguir mi cabeza alrededor de claves primarias como claves externas. Para mí, las claves foráneas están destinados a conectar dos filas de una tabla. Por lo tanto, tendría sentido lógico a usar, por ejemplo, username de la user tabla como clave externa en la picture tabla. Esto significa que la imagen en la fila pertenece al usuario especificado. Sin embargo, parece que la práctica general, favorece el uso de números sin sentido como principal IDs. Además de la clave externa debe/debería referirse a la clave primaria. ¿Y si no sé la clave primaria, pero sé que otra columna única, en este caso username, ¿cómo puedo obtener la clave principal desde dentro de otra MySQL declaración, o, alternativamente, tener los extranjeros punto clave no clave primaria?

OriginalEl autor puk | 2011-11-14

3 Comentarios

  1. 8

    Además de la clave externa debe/debería referirse a la clave primaria. ¿Y si no sé la clave primaria, pero sé que otra columna única, en este caso el nombre de usuario, ¿cómo puedo obtener la clave principal desde dentro de otra MySQL declaración, o, alternativamente, tener los extranjeros punto clave no clave primaria?

    Sí, si usted tiene otra clave única, usted puede tener la clave externa que hace referencia a él:

    CREATE TABLE user
    ( userid INT NOT NULL 
    , username VARCHAR(20) NOT NULL
    ---  other fields
    , PRIMARY KEY (userid)
    , UNIQUE KEY (username)
    ) ENGINE = InnoDB ;
    
    CREATE TABLE picture
    ( pictureid INT NOT NULL 
    , username VARCHAR(20) 
    ---  other fields
    , PRIMARY KEY (pictureid)
    , FOREIGN KEY (username)
        REFERENCES user(username)
    ) ENGINE = InnoDB ;

    Y si todas las claves externas de otras tablas se hace referencia a esta Clave Única (username), no hay ningún punto en tener un sentido de identidad. Usted puede caer y hacer el username la PRIMARY KEY de la tabla.

    (Edit:)
    Hay un par de puntos a tener un incremento automático de la clave principal para tablas InnoDB, incluso si no se utiliza como referencia debido a que el primero Primaria o índice Único se hace por defecto la agrupación índice de la tabla. Principal campo char puede tener rendimiento inconvenientes para INSERT y UPDATE declaraciones – pero que funcionan mejor en SELECT consultas.


    Para una discusión acerca de cuál utilizar, suplente (sin sentido, auto-generado) o claves naturales, y diferentes puntos de vista sobre el tema, lea esto: suplente-vs-natural-negocios-teclas

    La única razón por la que tengo un muñeco de clave principal es porque todo el mundo dice que es una gran idea. Sin embargo, hace que las inserciones sumamente tedioso porque hay que ir y encontrar la clave principal para usar como clave externa.

    OriginalEl autor ypercubeᵀᴹ

  2. 5

    La razón por la que el uso de un «sin sentido» valor para una clave principal, es que «significativas» los valores tienen una tendencia a cambiar de tiempo en tiempo.

    En el caso de un usuario que se ha cambiado el nombre, entonces no quiero tener que ir y cambiar el número de filas de otras tablas. Esta es la razón por la que es la práctica normal para darles un sentido de IDENTIFICACIÓN (normalmente el incremento automático).

    Aunque agradezco esta información, podría tal vez añadir cómo desplazarse utilizando la primaria ID como clave externa?

    OriginalEl autor MarkR

  3. 1

    Yo creo que usted puede tener la clave externa a cualquier punto de la columna (o columnas), si no es que se crea un índice con las columnas en el principio.

    Probar la ejecución de

    CREATE INDEX user_username_idx ON user(username);

    y, a continuación, crear su clave foránea debe trabajar.

    He intentado hacer esto, pero no funciona, ¿alguien se trató simplemente añadiendo un índice y referencias como clave externa?

    OriginalEl autor socha23

Dejar respuesta

Please enter your comment!
Please enter your name here