Sadece açıklama için: bir tablonun en fazla bir birincil anahtarı olabilir. Bir birincil anahtar, bir veya daha fazla sütundan oluşur (bu tablodan). Birincil anahtar iki veya daha fazla sütundan oluşuyorsa, buna bileşik birincil anahtar denir . Aşağıdaki gibi tanımlanır:
CREATE TABLE voting (
QuestionID NUMERIC,
MemberID NUMERIC,
PRIMARY KEY (QuestionID, MemberID)
);
Çift (SoruKimliği, ÜyeKimliği) tablo için benzersiz olmalıdır ve hiçbir değer NULL olamaz. Böyle bir sorgu yaparsanız:
SELECT * FROM voting WHERE QuestionID = 7
birincil anahtarın dizinini kullanacaktır. Ancak bunu yaparsanız:
SELECT * FROM voting WHERE MemberID = 7
bir bileşik dizin kullanmak için "soldan" tüm anahtarların kullanılmasını gerektirdiğinden bu olmayacaktır. Bir dizin alanlar (A, B, C) üzerindeyse ve ölçütleriniz B ve C üzerindeyse, o zaman bu dizin sizin için bu sorgu için bir yarar sağlamaz. Bu nedenle (Soru Kimliği, Üye Kimliği) ve (Üye Kimliği, Soru Kimliği) arasından tabloyu nasıl kullanacağınıza en uygun olanı seçin.
Gerekirse, diğerine bir dizin ekleyin:
CREATE UNIQUE INDEX idx1 ON voting (MemberID, QuestionID);