llaves - ¿Cómo puedo definir una clave primaria compuesta en SQL?
id compuesto sql server (2)
¿Cómo puedo definir una clave primaria compuesta que consta de dos campos en SQL?
Estoy usando PHP para crear tablas y todo. Quiero hacer un nombre de tabla voting
con los campos QuestionID
, MemeberID
y vote
. Y la clave primaria compuesta está compuesta por los campos QuestionID
y MemberID
.
¿Cómo debería hacer esto?
Solo por aclaración: una tabla puede tener como máximo una clave principal. Una clave principal consta de una o más columnas (de esa tabla). Si una clave principal consta de dos o más columnas, se denomina clave primaria compuesta . Se define de la siguiente manera:
CREATE TABLE voting (
QuestionID NUMERIC,
MemberID NUMERIC,
PRIMARY KEY (QuestionID, MemberID)
);
El par (QuestionID, MemberID) debe ser único para la tabla y ninguno de los valores puede ser NULL. Si haces una consulta como esta:
SELECT * FROM voting WHERE QuestionID = 7
usará el índice de la clave principal. Sin embargo, si haces esto:
SELECT * FROM voting WHERE MemberID = 7
no lo hará porque usar un índice compuesto requiere el uso de todas las teclas de la "izquierda". Si un índice está en los campos (A, B, C) y sus criterios están en B y C, ese índice no le sirve para esa consulta. Así que elija entre (Id. De pregunta, Id. De miembro) y (Id. De pregunta, Id. De pregunta) el que sea más apropiado para la forma en que usará la tabla.
Si es necesario, agregue un índice en el otro:
CREATE UNIQUE INDEX idx1 ON voting (MemberID, QuestionID);
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`)
);