Birincil Anahtarlar ve Benzersizlik
Birincil anahtarları, vekil ve doğal anahtarları, bileşik anahtarları ve her satırın güvenebileceğiniz benzersiz bir tanımlayıcıya neden ihtiyaç duyduğunu anlayın.
Birincil Anahtarlar ve Benzersizlik, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Academy kursu toplamda 4 dersten oluşur.
Her Satırın Benzersiz Bir ID'ye İhtiyacı Olmasının Nedeni
Belirli bir satırı güvenle güncellemek veya silmek için onu belirsizliğe yer bırakmadan gösterebilmeniz gerekir.
- "Alice Adams" adında iki kullanıcı bulunabilir
- Ancak
id = 42değerine sahip iki kullanıcı bulunamaz; bu, NOT kuralıdır - Benzersiz tanımlayıcıya birincil anahtar adı verilir
Birincil Anahtar Tanımlama
Tabloyu oluştururken bir sütunu birincil anahtar olarak işaretlersiniz:
CREATE TABLE products (
id BIGSERIAL PRIMARY KEY,
sku VARCHAR(50) NOT NULL,
name VARCHAR(200) NOT NULL,
price NUMERIC(10,2) NOT NULL
);Birincil Anahtar = NOT NULL + UNIQUE
Bir PRIMARY KEY otomatik olarak şunları uygular:
- NOT NULL — birincil anahtar değerleri eksik olamaz
- UNIQUE — hiçbir iki satır aynı birincil anahtar değerini paylaşamaz
Veritabanı ayrıca birincil anahtar üzerinde benzersiz bir dizin oluşturur; böylece ID ile yapılan aramalar hızlı olur.
Yapay ve Doğal Anahtarlar
Birincil anahtar için iki seçeneğiniz vardır:
- Yapay — veritabanının oluşturduğu sentetik bir ID (BIGSERIAL, UUID). Modern uygulamalarda en yaygın seçenektir.
- Doğal — gerçek dünyadaki bir tanımlayıcı (e-posta, ISBN). Risklidir: insanlar e-posta adreslerini değiştirebilir.
En iyi uygulama: yapay bir ID kullanın ve doğal anahtara UNIQUE kısıtı koyun.
BIGSERIAL: Otomatik Artan Tamsayılar
PostgreSQL'de BIGSERIAL, bir diziyle desteklenen 64 bitlik otomatik artan bir sütun oluşturur.
CREATE TABLE orders (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL,
total NUMERIC(10,2) NOT NULL
);
-- You omit id on insert and the DB fills it in:
INSERT INTO orders (user_id, total) VALUES (7, 99.50);UUID Birincil Anahtarları
Başka bir seçenek, ID'lerin sistemler arasında benzersiz olması veya istemci tarafında oluşturulması gerektiğinde kullanışlı olan 128 bitlik bir UUID'dir.
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE TABLE sessions (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
user_id BIGINT NOT NULL,
ip INET
);Bileşik Birincil Anahtarlar
Bazen doğal tanımlayıcı, sütunların birleşiminden oluşur:
CREATE TABLE order_items (
order_id BIGINT NOT NULL,
product_id BIGINT NOT NULL,
quantity INT NOT NULL,
PRIMARY KEY (order_id, product_id)
);
-- The pair (order_id, product_id) must be unique
-- A product can appear at most once per orderUNIQUE Kısıtları ve Birincil Anahtar
Başka sütunları, onları birincil anahtar yapmadan benzersiz olarak tanımlayabilirsiniz:
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
username VARCHAR(50) UNIQUE
);
-- INSERT below fails on the second row:
INSERT INTO users (email, username) VALUES ('a@x.com', 'alice');
INSERT INTO users (email, username) VALUES ('a@x.com', 'bob'); -- ERRORYinelenen Ekleme İşleminde Ne Olur?
Yinelenen bir birincil anahtar eklemeye çalışırsanız veritabanı ifadenin tamamını reddeder:
ERROR: duplicate key value violates unique constraint "users_pkey" DETAIL: Key (id)=(42) already exists.
Bu iyidir — verilerin sessizce bozulmasını önler.
Birincil Anahtarla Satır Aramak Hızlıdır
Birincil anahtar üzerindeki benzersiz dizin, milyarlarca satır ölçeğinde bile O(log n) arama yapmanızı sağlar.
-- Index Scan using users_pkey on users (cost=0.43..8.45 rows=1)
SELECT email FROM users WHERE id = 42;ID'leri Yeniden Kullanmayın
Bir satırı silseniz bile birincil anahtarını yeniden kullanmayın. Başka tablolar veya harici sistemler hâlâ bu anahtara başvuruyor olabilir. Dizinin artmaya devam etmesine izin verin — ID'ler ucuzdur.
Özet
Birincil anahtarlar her satıra sabit ve benzersiz bir tanımlayıcı sağlar.
- Yapay anahtarları (BIGSERIAL veya UUID) tercih edin
- Yinelenmemesi gereken doğal anahtarlar için UNIQUE kullanın
- Bileşik birincil anahtarlar, "bu çift benzersiz olmalıdır" durumunu modeller
Hızlı Kontrol
Bir PRIMARY KEY tarafından örtük olarak hangisi uygulanır?
Sıkça Sorulan Sorular
“Birincil Anahtarlar ve Benzersizlik” dersi ücretsiz mi?
Evet — “Birincil Anahtarlar ve Benzersizlik” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Academy kursu toplamda 4 dersten oluşur.
“Birincil Anahtarlar ve Benzersizlik” dersinde ne öğreneceğim?
Birincil anahtarları, vekil ve doğal anahtarları, bileşik anahtarları ve her satırın güvenebileceğiniz benzersiz bir tanımlayıcıya neden ihtiyaç duyduğunu anlayın. SQL Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
SQL Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te SQL Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Birincil Anahtarlar ve Benzersizlik” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu SQL Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her SQL Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- RDBMS Nedir ve Tablolar Neden Önemlidir
- Birincil Anahtarlar ve Benzersizlik
- NULL: Üçüncü Doğruluk Değeri
- Veri Türlerine Genel Bakış: INT VARCHAR DATE BOOLEAN