Cómo puedo definir una clave principal compuesta que consta de dos campos en SQL?

Estoy usando PHP para crear tablas y todo. Quiero hacer una tabla de nombre voting con campos QuestionID, MemeberID, y vote. Y la clave principal Compuesta consta de los campos QuestionID y MemberID.

¿Cómo debo hacerlo?

  • «Y el Idpregunta y id. de miembro serán las claves principales.» (Idpregunta, id. de miembro) será el (composite) de la clave principal. Sólo hay una llave y se compone de dos columnas.
InformationsquelleAutor Zeeshan Rang | 2009-07-10

2 Comentarios

  1. 200

    Sólo una aclaración: una tabla puede tener una clave primaria. Una clave principal consta de una o más columnas (de la tabla). Si una clave principal consta de dos o más columnas se llama clave principal compuesta. Se define de la siguiente manera:

    CREATE TABLE voting (
      QuestionID NUMERIC,
      MemberID NUMERIC,
      PRIMARY KEY (QuestionID, MemberID)
    );

    El par (Idpregunta,id. de miembro) debe ser único para la tabla y ninguno de los dos valores puede ser NULL. Si haces una consulta como esta:

    SELECT * FROM voting WHERE QuestionID = 7

    se utilizará la clave principal del índice. Sin embargo, si usted hace esto:

    SELECT * FROM voting WHERE MemberID = 7

    no porque el uso de un índice compuesto requiere el uso de todas las claves de la «izquierda». Si un índice es en los campos de (a,B,C) y los criterios de está en B y C, a continuación, dicho índice es de ninguna utilidad para usted para esa consulta. Para elegir (Idpregunta,id. de miembro) y (id. de miembro,Idpregunta) la que sea más adecuada de cómo van a utilizar la tabla.

    Si es necesario, añadir un índice en el otro:

    CREATE UNIQUE INDEX idx1 ON voting (MemberID, QuestionID);
    • Buena respuesta. Solo para aclarar, Idpregunta y id. de miembro no están separadas de las claves principales, sino más bien la combinación de ellos forman un único par/tupla.
    • Hay un beneficio para la adición de índice de (MemberID, QuestionID), frente a sólo el MemberID? Como mucho lo que he entendido, que la indexación de búsqueda al seleccionar con QuestionId, y también (QuestionId, MemeberId), por lo que la única falta uno sería MemberId sólo.
    • Sé que esta respuesta es bastante viejo, pero desde que apareció durante una búsqueda en google… parece Que hay una inconsistencia en el texto acerca de las columnas que se utilizan (o no) para el índice por defecto(es?). Además, se asume que cada RDBMS creará automáticamente un índice de la clave primaria, pero ya que no está obligado por ninguna norma, puede haber casos de esquina por ahí.
    • Debido a que ambos campos son simples (y probablemente primaria) teclas de otras tablas en el ejemplo se muestra una clave compuesta no de una clave compuesta
  2. 6
    CREATE TABLE `voting` (
      `QuestionID` int(10) unsigned NOT NULL,
      `MemberId` int(10) unsigned NOT NULL,
      `vote` int(10) unsigned NOT NULL,
      PRIMARY KEY  (`QuestionID`,`MemberId`)
    );

Dejar respuesta

Please enter your comment!
Please enter your name here