İlişkisel veritabanlarında birincil anahtar, bir tablodaki verilerin tekilliğini ve bütünlüğünü sağlamada kritik bir rol oynar. Birincil anahtar, bir tablodaki her kaydı benzersiz şekilde tanımlayan, indekslemeye temel oluşturan, varlık bütünlüğünü zorlayan ve tablolar arasında ilişkiler kuran bir kısıtlamadır.
Bu eğitimde, SQL birincil anahtarlarını derinlemesine inceleyerek temel ilkeleri, uygulama yöntemlerini ve iyileştirme tekniklerini ele alacağım. Ayrıca yaygın hatalar ve en iyi uygulamalar ile gerçek dünya senaryolarını da kapsayacağım. Hâlâ SQL öğreniyorsanız, kapsamlı SQL yol haritamıza göz atmanızı ve SQL Fundamentals beceri yolumuzu almanızı öneririm.
SQL Birincil Anahtar nedir?
SQL birincil anahtar, bir tablodaki her satırı benzersiz olarak tanımlayan bir sütun veya sütunlar kümesidir. Bu, iki satırın aynı birincil anahtar değerine sahip olamayacağı anlamına gelir. Bir tablonun yalnızca bir birincil anahtarı olabilir ve bu anahtar bir veya birden fazla sütundan oluşabilir.
Birincil anahtarlar, veri bütünlüğünü zorlamak ve verimli sorgulamayı mümkün kılmak için hayati öneme sahiptir. Şimdi bazı temel noktaları ele alalım.
Birincil anahtarlar, veritabanı normalizasyonu ve ilişkisel bütünlük için gereklidir.
Birincil anahtarların temel özellikleri
Benzersizlik: Birincil anahtar sütun(lar)ındaki her değerin benzersiz olmasını sağlar.
Boş olmama: Birincil anahtar sütunları NULL değer içeremez.
Değişmezlik: İdealde, başvuran tablolarda tutarsızlıkları önlemek için birincil anahtar değerleri yaşam döngüleri boyunca değişmeden kalmalıdır.
Kısıtlamalar ve indeksleme
Bir birincil anahtar tanımlandığında, veritabanı kısıtlamayı uygulamak için otomatik olarak benzersiz bir indeks oluşturur. Bu indeks, özellikle arama işlemlerinde sorgu performansını hızlandırır.
Bu indeks sistemi sayesinde, birincil anahtarlar veritabanı motoruna yürütme planı optimizasyonunda yardımcı olur. Bu da sorgularınızın daha hızlı çalışmasını sağlar.
Birincil anahtarlar için yaygın veri tipleri
Birincil anahtarlar çeşitli veri türlerinden olabilir. İşte yaygın olarak kullanılan bazı türler:
INTEGER veya SERIAL: Verimli ve en yaygın kullanılan.
BIGINT: Milyarlarca satır depolaması beklenen tablolar için kullanışlı.
UUID: Dağıtık sistemler ve sıralı öngörülebilirlikten kaçınmak için iyi.
CHAR/VARCHAR: Dikkatle kullanılır, genellikle gerekli olduğunda doğal anahtarlarda.
SQL Birincil Anahtar Türleri ve Mimarisi
Birincil anahtarlar, yapıları ve kökenlerine göre çeşitli türlere ayrılabilir. Bazı örnekler şunlardır:
Doğal anahtarlar: Mevcut verilerden türetilir (ör. Sosyal Güvenlik Numarası, e-posta) ve iş kullanıcıları için anlaşılması kolay, çoğu zaman anlamlıdır. Ancak bu, güncelleme, çoğaltma ve olası gizlilik sorunları riski taşır.
Vekil anahtarlar: Genellikle SERIAL, BIGSERIAL veya UUID ile uygulanan, sistem tarafından üretilen kimlikler gibi yapay anahtarlar. Bu tür anahtarlar, sağlamlık, gizlilik ve daha kolay bakım sağlar.
Özelliklere göre karşılaştırdığımızda, farklarını aşağıdaki özet tabloda görebiliriz:
Özellik
Doğal Anahtar
Vekil Anahtar
İş Anlamı
Var
Yok
Kararlılık
Çoğunlukla kararsız
Oldukça kararlı
Performans
Büyük alanlar gerektirebilir
Genellikle kompakt
Gizlilik Endişeleri
Daha yüksek
Daha düşük
Bileşik birincil anahtar mimarisi
Bileşik birincil anahtar, tablolarda benzersiz anahtar üretmenin yaygın bir yoludur. Anahtar genellikle iki veya daha fazla sütunda bulunan verilerden türetilir.
Karmaşıklık: Birleşimler ve yabancı anahtar başvuruları daha karmaşık hale gelir.
İndeks Boyutu: İndeksler büyüyebilir ve performansı etkileyebilir.
Veritabanlarında kullanılan ek anahtarlar
Birincil anahtarın yanı sıra kullanılabilecek başka anahtarlar da vardır, örneğin:
Aday anahtar: Bir satırı benzersiz olarak tanımlayabilen öznitelik kümesi.
Süper anahtar: Bir aday anahtarın herhangi bir üst kümesi (ek sütunlar içerir).
Alternatif anahtar: Birincil anahtar olarak seçilmeyen bir aday anahtar.
Hangi veri alanını birincil anahtar olarak kullanacağınıza karar verirken aşağıdaki faktörleri değerlendirebilirsiniz:
Veri değişim sıklığı: Veriler ne sıklıkla değişiyor?
Sütun veri türü ve boyutu: Veri türü indeksleme için uygun mu?
Beklenen sorgu kalıpları: Bu alan sorgulama için uygun olacak mı?
SQL'de Birincil Anahtarları Tanımlama ve Değiştirme
Şimdi, SQL komutlarını kullanarak PostgreSQL'de birincil anahtarları nasıl bildirebileceğimize ve yönetebileceğimize bakalım.
Tablo oluşturma, mevcut tabloları değiştirme ve kısıtlama davranışını yönetme gibi çeşitli senaryolardan geçeceğiz.
Bildirim ve değiştirme sözdizimi
Tablo oluşturma sırasında
Tablo oluşturma aşamasında, bulunması muhtemel alanları oluşturmalısınız. Bu örnekte, benzersiz tamsayılardan oluşan bir çalışan kimliği oluşturacağız.
CREATETABLE employees (
employee_id SERIALPRIMARYKEY,-- Automatically generates unique integers
name TEXTNOTNULL,-- Basic text field, required
email TEXTUNIQUE-- Unique constraint to prevent duplicate emails);Altyapı:
Bu örnek, SERIAL sözde türünü kullanarak satır içinde bir birincil anahtar tanımlamayı gösterir. PostgreSQL, SERIAL'ı, vekil anahtarlar için ideal olan otomatik artan tamsayı sütunu olarak ele alır. E-posta sütununa ayrıca bir UNIQUE kısıtlaması verilir; bu da onun alternatif anahtar olarak hizmet edebilmesini sağlar.
ALTER TABLE kullanma
Şimdi, employee_id'yi birincil anahtar olarak belirleyelim.
Bu komut, bir tablo birincil anahtar olmadan zaten oluşturulmuşsa ve sonradan bir tane eklemek istiyorsanız kullanılır. Birincil anahtar ekleyeceğiniz sütunun NULL veya yinelenen değerler içermediğinden emin olun; aksi halde komut başarısız olur.
Birincil anahtarı kaldırma
Artık birincil anahtarımız ayarlandığına göre, birincil anahtar kısıtlamasını da kaldırabilirsiniz.
Mevcut bir birincil anahtar kısıtlamasını kaldırmak için bu ifadeyi kullanın. employees_pkey kısıtlama adı, PostgreSQL'in varsayılan adlandırma kuralını (<table>_pkey) takip eder. Bu, tablo şemasını yeniden tasarlarken veya farklı bir birincil anahtar sütununa geçerken yararlıdır.
PostgreSQL'de birincil anahtarlar için varsayılan kısıtlama adı table_name_pkey biçimindedir.
Birincil anahtar sütunlarında NULL değerlere izin verilmez. Yinelenen değerler de kısıtlama ihlali hatalarına neden olur
Bunu yönetmek için bazı stratejiler şunlardır:
Yinelenenlerden kaçınmak için INSERT ... ON CONFLICT kullanmak.
Eklemeden önce anahtar uygunluğunu kontrol etmek için işlemler kullanmak.
Otomatik artış ve küresel tanımlayıcı stratejileri
PostgreSQL'in SERIAL, BIGSERIAL ve IDENTITY türleri kimlik oluşturmayı basitleştirir.
Buna ek olarak, UUID'ler güvenli küresel tanımlayıcılar sağlar. Sırasız ve öngörülemez yapıları, özellikle numaralandırma saldırılarını önlemede güvenliği de artırır.
İşte bir UUID'nin nasıl oluşturulup birincil anahtar olarak kullanılabileceğine dair bir uygulama
İlişkilerde Birincil Anahtarlar ve Performansı Artırma
Birincil anahtarlar, ilişkisel tablolar arasında tutarlılığı sağlamak ve performansı artırmak için gereklidir.
Varlık bütünlüğünü zorlama
Varlık bütünlüğü, birincil anahtarlar aracılığıyla NULL ve yinelenen değerlere izin verilmemesiyle sağlanır. Benzersiz bir tanımlayıcıya sahip olmak, ekleme/güncelleme işlemleri sırasında veri anormalliklerini önlemeye yardımcı olur.
Yabancı anahtarlar ve başvuru bütünlüğü
Yabancı anahtarlar, başvurulan tablodaki mevcut birincil anahtar değerleriyle eşleşmelidir. Başvuru bütünlüğü, tablolar arasındaki tüm başvuruların geçerli kalmasını sağlar ve var olmayan veriye başvuru yapılan "yetim kayıtları"nı önler.
Buna aşağıdaki yaygın basamaklı işlevler dahil olabilir:
ON DELETE CASCADE
ON UPDATE CASCADE
SET NULL ve SET DEFAULT
İndeksleme ve sorgu optimizasyonu
Birincil anahtarlar üzerindeki benzersiz indeksler, SELECT ve JOIN sorgularını hızlandırır. Ancak, zayıf anahtar tasarımı şişkin indekslere ve düşen performansa yol açabilir.
Sorgularınız yavaşsa ve bunun kötü indekslemeden kaynaklandığından şüpheleniyorsanız, sorgu planlarını incelemek ve indeks kullanımını değerlendirmek için EXPLAIN ANALYZE kullanın.
Tasarım En İyi Uygulamaları ve Olası Tuzaklar
İyi anahtar tasarımı, sürdürülebilirlik, performans ve ölçeklenebilirliği destekler. Bazı en iyi uygulamalara ve yaygın hatalara bakalım.
Anahtar seçimi yönergeleri
Kısa, sabit uzunluklu veri türlerini seçin (ör. INT, UUID).
Değişme olasılığı yüksek anahtarlardan kaçının.
Mantıksal dolaşıklığı önlemek için anahtarın içinde gömülü bir iş anlamı olmamasını sağlayın.
Basitlik ve normalizasyon için vekil anahtarlar kullanın.
Yaygın uygulama hataları
Birden fazla birincil anahtar kullanmak (tablo başına yalnızca bir tane izin verilir).
Benzersiz kısıtlamaları birincil anahtar olarak yanlış etiketlemek.
Birincil anahtar tanımlamamak; bu da yetim kayıtlara yol açar.
Çözümler şunları içerir:
ALTER TABLE ile eksik anahtarları eklemek.
Şema tasarımını normalize etmek.
Tutarlı adlandırma kuralları kullanmak.
Ölçeklenebilirlik hususları
Ölçeklenen bir veritabanı çözümü oluştururken, büyük veri kümeleri arasında birlik sağlamak için vekil anahtarlar kullanmaya çalışın. Zorunlu olmadıkça dağıtık sistemlerde bileşik anahtarlardan kaçının. Tablo/indeks boyutunuzun düzenli izlenmesi de şarttır.
Gelişmiş Uygulama Senaryoları
Dağıtık veritabanları veya eski sistemler gibi karmaşık sistemlerde birincil anahtarları ele almak, gelişmiş stratejiler gerektirir.
Dağıtık veritabanı sistemleri
Dağıtık veritabanları daha zorludur. Düğümler arasında anahtar üretiminin çakışmasız olmasını sağlamanız gerekir. Bunun için UUID'leri ve merkezileştirilmiş anahtar yönetim hizmetlerini kullanmayı deneyebilirsiniz
Bölümleme Dikkatleri:
Anahtarların sıcak noktalar oluşturmamasını sağlayın.
Parçalama yaparken karma veya rastgeleleştirilmiş anahtarlar kullanın.
Eski sistem geçişi
Bir eski veritabanından sistem geçişi yaparken, önce mevcut benzersiz tanımlayıcıları belirleyin. Ardından, doğal anahtarların yanına kademeli olarak vekil anahtarlar ekleyin.
Tam geçişten önce çift anahtar desteğini çalıştırarak temkinli ilerleyin.
Geçiş Süreci:
Vekil anahtar sütunu ekleyin.
Mevcut kayıtlar için anahtarları doldurun.
Uygulama sorgularını değiştirin.
Doğrulamanın ardından eski doğal anahtarları kaldırın.
PostgreSQL Kullanarak Birincil Anahtarların Gösterimi
Tablo oluşturmadan ve veri eklemeden önce, çalışan bir PostgreSQL ortamına ihtiyacınız var. Bu bölüm, PostgreSQL'i kurmaya yönelik kısa bir kılavuzla başlar; ardından birincil anahtar kavramlarını uygulamak için örnek bir veri kümesini tanımlama ve kullanma adımlarını içerir.
Adım 1: PostgreSQL için ilk kurulum
PostgreSQL'i henüz kurmadıysanız, başlamak için şu adımları izleyin:
İşletim sisteminizi seçin (Windows, macOS veya Linux).
Yükleyiciyi indirin ve çalıştırın; PostgreSQL sunucusuyla birlikte pgAdmin'i (grafiksel arayüz) de kurduğunuzdan emin olun.
PostgreSQL hizmetini başlatın
Kurulumdan sonra PostgreSQL hizmeti genellikle otomatik olarak başlar.
Ayrıca, işletim sistemi hizmet yöneticiniz üzerinden (ör. Windows'ta Services veya Linux'ta systemctl) elle de başlatabilirsiniz.
pgAdmin'i başlatın veya CLI üzerinden bağlanın
pgAdmin'i kullanarak veritabanlarını görsel olarak yönetin ve sorgulayın.
Alternatif olarak, bir terminal açın ve şu komutla bağlanın:psql -U postgres
Farklıysa postgres'i gerçek PostgreSQL kullanıcı adınızla değiştirin.
Yeni bir veritabanı oluşturun
pgAdmin içinde "Databases" üzerine sağ tıklayın ve "Create > Database" seçeneğini belirleyin.
Ya da şu SQL komutunu kullanın:```sql
CREATE DATABASE pk_tutorial;
Connect to the new database in psql with:```bash
\c pk_tutorialAltyapı:
Ortamınız hazır olduğunda, eğitimde zaten özetlenen veri kümesi kurulumunun geri kalanına devam edebilirsiniz.
Sırada, PostgreSQL kullanarak örnek bir veri kümesi oluşturmak için adım adım bir rehbere bakalım. Veri kümesi, birbiriyle ilişkili iki tablodan oluşur: customers ve orders.
customers tablosu sadelik için bir vekil anahtar kullanırken, orders tablosu küresel benzersizliği göstermek için UUID tabanlı bir birincil anahtar kullanır.
Adım 2: Tabloları oluşturma
İlk adım, şemayı tanımlamak ve her iki tablo için birincil anahtar kısıtlamalarını oluşturmaktır. Ayrıca ilişkisel bütünlüğü göstermek için orders.customer_id ile customers.customer_id arasında bir yabancı anahtar ilişkisi tanımlarız.
customers tablosu için birincil anahtar customer_id'dir.
orders tablosu için birincil anahtar order_id'dir.
customer_id, benzersiz kimliklerin otomatik olarak üretilmesi için SERIAL anahtar sözcüğünü kullanır.
email, yinelenmeleri önlemek için UNIQUE kısıtlamasına sahiptir.
order_id, gen_random_uuid() ile otomatik olarak üretilen bir UUID'dir.
ON DELETE CASCADE ifadesi, bir müşteriyi sildiğinizde ilgili siparişlerinin de silinmesini sağlar.
pgAdmin arayüzünde bunun şöyle görünmesi gerekir:
Adım 3: Örnek verileri ekleme
Sonraki adımda, tipik ekleme işlemleri sırasında birincil ve yabancı anahtarların nasıl davrandığını gözlemlemek için tablolara örnek kayıtlar ekleriz. Bu veriler, temel bir e-ticaret senaryosunu simüle eder.
Son olarak, siparişler ve müşteriler arasında yabancı anahtarın nasıl sorunsuz ilişkisel birleşimler sağladığını göstermek için her iki tablodan bilgi getiren bir SQL JOIN sorgusu gerçekleştiriyoruz.
Çalıştıracağımız kod şudur:
SELECT o.order_id, o.order_date, c.name, c.email
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id;Altyapı:
Örnek çıktı şöyledir:
Yukarıdaki görselde de görülebileceği gibi, çıktı tablosu her iki tablodan verileri gösterir. Örneğin, birleştirilmiş tabloda orders tablosundan order_date alanı ve customers tablosundan name alanı bulunur.
Sonuç
SQL birincil anahtarları, ilişkisel veritabanlarının temelini oluşturur; benzersizliği zorlar, verimli sorguları mümkün kılar ve veri bütünlüğünü destekler.
Birincil anahtarların ilkelerini, sınıflandırmalarını, sözdizimini, en iyi uygulamalarını ve ileri düzey stratejilerini ele aldık. Daha fazla öğrenme kaynağı için Introduction to Relational Databases in SQL kursumuza veya Joining Data in SQL kursumuza göz atın.
Doğal anahtarlar ile vekil anahtarlar arasındaki farklar nelerdir?⌄
Doğal anahtarlar, hâlihazırda var olan gerçek dünya verilerinden (ör. e-posta veya ulusal kimlik) türetilirken; vekil anahtarlar, satırları yalnızca benzersiz şekilde tanımlamak için kullanılan sistem tarafından üretilen değerlerdir (ör. otomatik artan kimlikler).
Bileşik birincil anahtarlar veritabanı tasarımını nasıl iyileştirir?⌄
Bileşik birincil anahtarlar, benzersizliği sağlamak için birden fazla sütun kullanır; bu da bağlantı tablolarında ilişkileri daha iyi modellemeyi ve çoktan çoğa ilişkilerde çok öznitelikli benzersizliği zorlamayı mümkün kılar.
Birincil anahtar seçimi için en iyi uygulamalar nelerdir?⌄
İyi bir birincil anahtar benzersiz, zaman içinde değişmeyecek kadar istikrarlı, boyut olarak minimal ve ideal olarak performans ve indeksleme verimliliği için sayısal olmalıdır.
Birincil anahtarlar veri bütünlüğüne nasıl katkıda bulunur?⌄
Birincil anahtarlar, bir tablodaki her satırın benzersiz şekilde tanımlanmasını sağlar; böylece yinelenen kayıtları önler ve yabancı anahtarlar aracılığıyla doğru başvuru yapılmasını destekler.
Birincil anahtarların tablolar arası ilişkilerin kurulmasındaki rolünü açıklayabilir misiniz?⌄
Birincil anahtarlar, diğer tablolardaki yabancı anahtarlar için referans noktası görevi görür; bu da ilişkisel bütünlüğü mümkün kılar ve normalize bir şemada bire-çok veya çoktan çoğa ilişkileri destekler.
Ben Austin, sağlık sektöründe veri bilimci ve veri analisti olarak yıllara dayanan deneyime sahip bir blogger ve teknoloji yazarıyım. Biyoloji geçmişiyle başladığım teknoloji yolculuğumda, şimdi teknoloji blogum aracılığıyla başkalarının da aynı geçişi yapmasına yardımcı oluyorum. Teknolojiye olan tutkum, onlarca SaaS şirketine yazılı katkılar sunmama, başkalarına ilham vermeme ve deneyimlerimi paylaşmama vesile oldu.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
İlişkisel veritabanlarında birincil anahtar, bir tablodaki verilerin tekilliğini ve bütünlüğünü sağlamada kritik bir rol oynar. Birincil anahtar, bir tablodaki her kaydı benzersiz şekilde tanımlayan, indekslemeye temel oluşturan, varlık bütünlüğünü zorlayan ve tablolar arasında ilişkiler kuran bir kısıtlamadır.
Bu eğitimde, SQL birincil anahtarlarını derinlemesine inceleyerek temel ilkeleri, uygulama yöntemlerini ve iyileştirme tekniklerini ele alacağım. Ayrıca yaygın hatalar ve en iyi uygulamalar ile gerçek dünya senaryolarını da kapsayacağım. Hâlâ SQL öğreniyorsanız, kapsamlı SQL yol haritamıza göz atmanızı ve SQL Fundamentals beceri yolumuzu almanızı öneririm.
SQL Birincil Anahtar nedir?
SQL birincil anahtar, bir tablodaki her satırı benzersiz olarak tanımlayan bir sütun veya sütunlar kümesidir. Bu, iki satırın aynı birincil anahtar değerine sahip olamayacağı anlamına gelir. Bir tablonun yalnızca bir birincil anahtarı olabilir ve bu anahtar bir veya birden fazla sütundan oluşabilir.
Birincil anahtarlar, veri bütünlüğünü zorlamak ve verimli sorgulamayı mümkün kılmak için hayati öneme sahiptir. Şimdi bazı temel noktaları ele alalım.
Birincil anahtarlar, veritabanı normalizasyonu ve ilişkisel bütünlük için gereklidir.
Birincil anahtarların temel özellikleri
Kısıtlamalar ve indeksleme
Bir birincil anahtar tanımlandığında, veritabanı kısıtlamayı uygulamak için otomatik olarak benzersiz bir indeks oluşturur. Bu indeks, özellikle arama işlemlerinde sorgu performansını hızlandırır.
Bu indeks sistemi sayesinde, birincil anahtarlar veritabanı motoruna yürütme planı optimizasyonunda yardımcı olur. Bu da sorgularınızın daha hızlı çalışmasını sağlar.
Birincil anahtarlar için yaygın veri tipleri
Birincil anahtarlar çeşitli veri türlerinden olabilir. İşte yaygın olarak kullanılan bazı türler:
INTEGERveyaSERIAL: Verimli ve en yaygın kullanılan.BIGINT: Milyarlarca satır depolaması beklenen tablolar için kullanışlı.UUID: Dağıtık sistemler ve sıralı öngörülebilirlikten kaçınmak için iyi.CHAR/VARCHAR: Dikkatle kullanılır, genellikle gerekli olduğunda doğal anahtarlarda.SQL Birincil Anahtar Türleri ve Mimarisi
Birincil anahtarlar, yapıları ve kökenlerine göre çeşitli türlere ayrılabilir. Bazı örnekler şunlardır:
SERIAL,BIGSERIALveyaUUIDile uygulanan, sistem tarafından üretilen kimlikler gibi yapay anahtarlar. Bu tür anahtarlar, sağlamlık, gizlilik ve daha kolay bakım sağlar.Özelliklere göre karşılaştırdığımızda, farklarını aşağıdaki özet tabloda görebiliriz:
Özellik
Doğal Anahtar
Vekil Anahtar
İş Anlamı
Var
Yok
Kararlılık
Çoğunlukla kararsız
Oldukça kararlı
Performans
Büyük alanlar gerektirebilir
Genellikle kompakt
Gizlilik Endişeleri
Daha yüksek
Daha düşük
Bileşik birincil anahtar mimarisi
Bileşik birincil anahtar, tablolarda benzersiz anahtar üretmenin yaygın bir yoludur. Anahtar genellikle iki veya daha fazla sütunda bulunan verilerden türetilir.
Bu tür anahtarlar, ilişkinin kendisinin benzersizliği gerektirdiği bağlantı veya ilişkilendirici tablolarda yaygındır.
course_enrollmentstablosu,student_idvecourse_idbileşik anahtarını kullanabilir.Dikkate alınacaklar:
Veritabanlarında kullanılan ek anahtarlar
Birincil anahtarın yanı sıra kullanılabilecek başka anahtarlar da vardır, örneğin:
Hangi veri alanını birincil anahtar olarak kullanacağınıza karar verirken aşağıdaki faktörleri değerlendirebilirsiniz:
SQL'de Birincil Anahtarları Tanımlama ve Değiştirme
Şimdi, SQL komutlarını kullanarak PostgreSQL'de birincil anahtarları nasıl bildirebileceğimize ve yönetebileceğimize bakalım.
Tablo oluşturma, mevcut tabloları değiştirme ve kısıtlama davranışını yönetme gibi çeşitli senaryolardan geçeceğiz.
Bildirim ve değiştirme sözdizimi
Tablo oluşturma sırasında
Tablo oluşturma aşamasında, bulunması muhtemel alanları oluşturmalısınız. Bu örnekte, benzersiz tamsayılardan oluşan bir çalışan kimliği oluşturacağız.
SQL komutları hakkında daha fazlası için SQL Temelleri Şipşak Kılavuzumuzu inceleyin.
Bu örnek, SERIAL sözde türünü kullanarak satır içinde bir birincil anahtar tanımlamayı gösterir. PostgreSQL, SERIAL'ı, vekil anahtarlar için ideal olan otomatik artan tamsayı sütunu olarak ele alır. E-posta sütununa ayrıca bir UNIQUE kısıtlaması verilir; bu da onun alternatif anahtar olarak hizmet edebilmesini sağlar.
ALTER TABLE kullanma
Şimdi,
employee_id'yi birincil anahtar olarak belirleyelim.Bu komut, bir tablo birincil anahtar olmadan zaten oluşturulmuşsa ve sonradan bir tane eklemek istiyorsanız kullanılır. Birincil anahtar ekleyeceğiniz sütunun NULL veya yinelenen değerler içermediğinden emin olun; aksi halde komut başarısız olur.
Birincil anahtarı kaldırma
Artık birincil anahtarımız ayarlandığına göre, birincil anahtar kısıtlamasını da kaldırabilirsiniz.
Mevcut bir birincil anahtar kısıtlamasını kaldırmak için bu ifadeyi kullanın.
employees_pkeykısıtlama adı, PostgreSQL'in varsayılan adlandırma kuralını (<table>_pkey) takip eder. Bu, tablo şemasını yeniden tasarlarken veya farklı bir birincil anahtar sütununa geçerken yararlıdır.PostgreSQL'de birincil anahtarlar için varsayılan kısıtlama adı
table_name_pkeybiçimindedir.PostgreSQL hakkında daha fazla bilgi için şipşak kılavuzumuza göz atın.
Null işleme ve çakışma yönetimi
Birincil anahtar sütunlarında NULL değerlere izin verilmez. Yinelenen değerler de kısıtlama ihlali hatalarına neden olur
Bunu yönetmek için bazı stratejiler şunlardır:
INSERT ... ON CONFLICTkullanmak.Otomatik artış ve küresel tanımlayıcı stratejileri
PostgreSQL'in
SERIAL,BIGSERIALveIDENTITYtürleri kimlik oluşturmayı basitleştirir.Buna ek olarak, UUID'ler güvenli küresel tanımlayıcılar sağlar. Sırasız ve öngörülemez yapıları, özellikle numaralandırma saldırılarını önlemede güvenliği de artırır.
İşte bir UUID'nin nasıl oluşturulup birincil anahtar olarak kullanılabileceğine dair bir uygulama
İlişkilerde Birincil Anahtarlar ve Performansı Artırma
Birincil anahtarlar, ilişkisel tablolar arasında tutarlılığı sağlamak ve performansı artırmak için gereklidir.
Varlık bütünlüğünü zorlama
Varlık bütünlüğü, birincil anahtarlar aracılığıyla NULL ve yinelenen değerlere izin verilmemesiyle sağlanır. Benzersiz bir tanımlayıcıya sahip olmak, ekleme/güncelleme işlemleri sırasında veri anormalliklerini önlemeye yardımcı olur.
Yabancı anahtarlar ve başvuru bütünlüğü
Yabancı anahtarlar, başvurulan tablodaki mevcut birincil anahtar değerleriyle eşleşmelidir. Başvuru bütünlüğü, tablolar arasındaki tüm başvuruların geçerli kalmasını sağlar ve var olmayan veriye başvuru yapılan "yetim kayıtları"nı önler.
Basamaklı eylemler, başvurulan birincil anahtarlar değiştiğinde tutarlılığı korur.
Buna aşağıdaki yaygın basamaklı işlevler dahil olabilir:
ON DELETE CASCADEON UPDATE CASCADESET NULLveSET DEFAULTİndeksleme ve sorgu optimizasyonu
Birincil anahtarlar üzerindeki benzersiz indeksler,
SELECTveJOINsorgularını hızlandırır. Ancak, zayıf anahtar tasarımı şişkin indekslere ve düşen performansa yol açabilir.Sorgularınız yavaşsa ve bunun kötü indekslemeden kaynaklandığından şüpheleniyorsanız, sorgu planlarını incelemek ve indeks kullanımını değerlendirmek için
EXPLAIN ANALYZEkullanın.Tasarım En İyi Uygulamaları ve Olası Tuzaklar
İyi anahtar tasarımı, sürdürülebilirlik, performans ve ölçeklenebilirliği destekler. Bazı en iyi uygulamalara ve yaygın hatalara bakalım.
Anahtar seçimi yönergeleri
INT,UUID).Yaygın uygulama hataları
Çözümler şunları içerir:
ALTER TABLEile eksik anahtarları eklemek.Ölçeklenebilirlik hususları
Ölçeklenen bir veritabanı çözümü oluştururken, büyük veri kümeleri arasında birlik sağlamak için vekil anahtarlar kullanmaya çalışın. Zorunlu olmadıkça dağıtık sistemlerde bileşik anahtarlardan kaçının. Tablo/indeks boyutunuzun düzenli izlenmesi de şarttır.
Gelişmiş Uygulama Senaryoları
Dağıtık veritabanları veya eski sistemler gibi karmaşık sistemlerde birincil anahtarları ele almak, gelişmiş stratejiler gerektirir.
Dağıtık veritabanı sistemleri
Dağıtık veritabanları daha zorludur. Düğümler arasında anahtar üretiminin çakışmasız olmasını sağlamanız gerekir. Bunun için UUID'leri ve merkezileştirilmiş anahtar yönetim hizmetlerini kullanmayı deneyebilirsiniz
Bölümleme Dikkatleri:
Eski sistem geçişi
Bir eski veritabanından sistem geçişi yaparken, önce mevcut benzersiz tanımlayıcıları belirleyin. Ardından, doğal anahtarların yanına kademeli olarak vekil anahtarlar ekleyin.
Tam geçişten önce çift anahtar desteğini çalıştırarak temkinli ilerleyin.
Geçiş Süreci:
PostgreSQL Kullanarak Birincil Anahtarların Gösterimi
Tablo oluşturmadan ve veri eklemeden önce, çalışan bir PostgreSQL ortamına ihtiyacınız var. Bu bölüm, PostgreSQL'i kurmaya yönelik kısa bir kılavuzla başlar; ardından birincil anahtar kavramlarını uygulamak için örnek bir veri kümesini tanımlama ve kullanma adımlarını içerir.
Adım 1: PostgreSQL için ilk kurulum
PostgreSQL'i henüz kurmadıysanız, başlamak için şu adımları izleyin:
pgAdmin'i (grafiksel arayüz) de kurduğunuzdan emin olun.systemctl) elle de başlatabilirsiniz.pgAdmin'i kullanarak veritabanlarını görsel olarak yönetin ve sorgulayın.postgres'i gerçek PostgreSQL kullanıcı adınızla değiştirin.pgAdminiçinde "Databases" üzerine sağ tıklayın ve "Create > Database" seçeneğini belirleyin.CREATE DATABASE pk_tutorial;
Ortamınız hazır olduğunda, eğitimde zaten özetlenen veri kümesi kurulumunun geri kalanına devam edebilirsiniz.
Sırada, PostgreSQL kullanarak örnek bir veri kümesi oluşturmak için adım adım bir rehbere bakalım. Veri kümesi, birbiriyle ilişkili iki tablodan oluşur:
customersveorders.customerstablosu sadelik için bir vekil anahtar kullanırken,orderstablosu küresel benzersizliği göstermek için UUID tabanlı bir birincil anahtar kullanır.Adım 2: Tabloları oluşturma
İlk adım, şemayı tanımlamak ve her iki tablo için birincil anahtar kısıtlamalarını oluşturmaktır. Ayrıca ilişkisel bütünlüğü göstermek için
orders.customer_idilecustomers.customer_idarasında bir yabancı anahtar ilişkisi tanımlarız.customerstablosu için birincil anahtarcustomer_id'dir.orderstablosu için birincil anahtarorder_id'dir.Açıklama:
customer_id, benzersiz kimliklerin otomatik olarak üretilmesi içinSERIALanahtar sözcüğünü kullanır.email, yinelenmeleri önlemek içinUNIQUEkısıtlamasına sahiptir.order_id,gen_random_uuid()ile otomatik olarak üretilen birUUID'dir.ON DELETE CASCADEifadesi, bir müşteriyi sildiğinizde ilgili siparişlerinin de silinmesini sağlar.pgAdmin arayüzünde bunun şöyle görünmesi gerekir:
Adım 3: Örnek verileri ekleme
Sonraki adımda, tipik ekleme işlemleri sırasında birincil ve yabancı anahtarların nasıl davrandığını gözlemlemek için tablolara örnek kayıtlar ekleriz. Bu veriler, temel bir e-ticaret senaryosunu simüle eder.
pgAdmin arayüzünde bunun şöyle görünmesi gerekir:
Adım 4: Verileri sorgulama
Son olarak, siparişler ve müşteriler arasında yabancı anahtarın nasıl sorunsuz ilişkisel birleşimler sağladığını göstermek için her iki tablodan bilgi getiren bir SQL
JOINsorgusu gerçekleştiriyoruz.Çalıştıracağımız kod şudur:
Örnek çıktı şöyledir:
Yukarıdaki görselde de görülebileceği gibi, çıktı tablosu her iki tablodan verileri gösterir. Örneğin, birleştirilmiş tabloda
orderstablosundanorder_datealanı vecustomerstablosundannamealanı bulunur.Sonuç
SQL birincil anahtarları, ilişkisel veritabanlarının temelini oluşturur; benzersizliği zorlar, verimli sorguları mümkün kılar ve veri bütünlüğünü destekler.
Birincil anahtarların ilkelerini, sınıflandırmalarını, sözdizimini, en iyi uygulamalarını ve ileri düzey stratejilerini ele aldık. Daha fazla öğrenme kaynağı için Introduction to Relational Databases in SQL kursumuza veya Joining Data in SQL kursumuza göz atın.
Tercihiniz eğitim yazılarıysa, Integrity Constraints in SQL rehberi veya SQL Joins Şipşak Kılavuzu da büyük ölçüde yardımcı olacaktır.