SQL ON DELETE CASCADE: Bağımlı Verileri Otomatik Olarak Kaldırın
SQL’de ON DELETE CASCADE’in bağımlı silmeleri nasıl otomatikleştirdiğini, tabloları tutarlı tuttuğunu ve yanlışlıkla veri kaybını önlemeye nasıl yardımcı olduğunu anlayın.
SQL’de veri silmek yalnızca tek bir satırı kaldırmaktan ibaret değildir. İlişkisel bir veritabanında tablolar genellikle birbirine bağlıdır ve bir tablodaki silme işlemi diğer tabloları etkileyebilir. Bunu güvenli bir şekilde yönetmek için SQL, satırlar silindiğinde veya güncellendiğinde ilişkili verilerin nasıl davranması gerektiğini tanımlamak üzere yabancı anahtar kısıtlamalarını kullanır.
En güçlü silme seçeneklerinden biri SQL ON DELETE CASCADE kısıtlamasıdır. Bir silmeyi engellemek veya arkada yetim kayıtlar bırakmak yerine, bu kural başvurulan üst satır silindiğinde veritabanına tüm bağımlı alt satırları otomatik olarak kaldırmasını söyler.
Bu eğitimde, ON DELETE CASCADE kısıtlamasının nasıl çalıştığını, veritabanlarının neden otomatik basamaklı silmeleri desteklediğini ve ON DELETE RESTRICT gibi daha kısıtlayıcı kurallara kıyasla ne zaman doğru tercih olduğunu göstereceğim. SQL’e yeniyseniz, Introduction to SQL kursumuzla başlayın; biraz deneyiminiz varsa Intermediate SQL kursunu deneyin.
SQL’de ON DELETE CASCADE Nedir?
ON DELETE CASCADE yabancı anahtar kısıtlamasının nasıl çalıştığını anlamak için önce başvuru bütünlüğünü ve CASCADE ifadesini açıklayayım.
Başvuru bütünlüğü ve yabancı anahtarlar
İlişkisel veritabanlarında tablolar, bir tablodaki (çocuk) bir sütunu başka bir tablodaki (ebeveyn) bir birincil anahtara bağlayan yabancı anahtarlar aracılığıyla birbirine bağlanır. Yabancı anahtarlar, bir alt satırın her zaman geçerli bir üst satırı işaret etmesini sağlamak için başvuru bütünlüğünü zorunlu kılar.
Bu zorunluluk olmadan, veritabanları artık var olmayan verileri referanslayan satırların bulunduğu yetim kayıtlarla kolayca sonuçlanabilir. Bu nedenle, daha oluşmadan önce bu yetimlerle nasıl başa çıkılacağını veritabanına tam olarak söyleyen silme kuralları vardır.
CASCADE gerçekte ne anlama gelir
SQL’de ON DELETE CASCADE kısıtlaması, silinen üst satırı referanslayan tüm alt satırların veritabanı tarafından otomatik olarak silinmesini sağlar. İşlemi yabancı anahtar zincirleri boyunca yinelemeli olarak tetikler ve bağımlı verileri tek bir atomik işlem içinde siler.
Örneğin, veritabanından bir müşteri kaydını silebilir ve bu işlem, bir sorguda hem siparişlerini hem de buna bağlı olarak sipariş kalemlerini silmeye kadar basamaklanır.
ON DELETE CASCADE Pratikte Nasıl Çalışır
Artık CASCADE’in ne yaptığını anladığınıza göre, veritabanının bu mantığı nasıl uyguladığına bakalım.
Ebeveyn ve çocuk tablo ilişkileri
Artık bildiğiniz gibi, veritabanı ilişkilerinde tablolardan biri ebeveyn olarak görev yapar, birincil anahtarı tutar, diğeri ise çocuk olarak görev yapar ve bu anahtarı yabancı anahtar olarak saklar. Ebeveyn tabloda bir DELETE ifadesi çalıştırdığınızda, veritabanı motoru önce yabancı anahtar kısıtlamalarını kontrol eder ve tüm bağımlıları belirlemek için indekslemeyi hız için kullanır.
Bir ebeveyn satır silindiğinde ne olur
Bir üst satırda DELETE komutu çalıştırdığınızda, veritabanı nihai yürütmeyi duraklatır ve yabancı anahtar kurallarını aşağıdaki sırayla kontrol eder:
Tanımlama: Motor, silinen kimlikle eşleşen çocuk tablolardaki tüm satırları bulmak için yabancı anahtar indeksine bakar.
Yürütme: Üst satırın kaldırılmasından önce (veya sırasında) motor tanımlanan alt satırları siler.
Doğrulama: Veritabanı, geride yetim satır kalmadığından emin olur. Tüm silmeler başarılıysa işlem tamamlanır.
Yukarıdaki sürecin yalnızca, makalenin ilerleyen kısımlarında göreceğimiz üzere, ON DELETE CASCADE kısıtlamasını tanımladıysanız gerçekleşeceğini unutmayın.
ON DELETE CASCADE ve Diğer Silme Kuralları
SQL’de, veritabanına farklı tablolardaki ilişkili verilerin nasıl ele alınacağını söyleyen farklı DELETE kuralları vardır. Bu bölümde, ON DELETE CASCADE’i bu kısıtlamalarla karşılaştıracağız.
CASCADE ve RESTRICT
Yukarıdaki açıklamadan gördüğümüz üzere CASCADE, bir üst satır kaldırıldığında tüm bağımlı alt satırları otomatik olarak siler ve geride yetim kayıt kalmamasını sağlar.
Buna karşılık SQL RESTRICT kısıtlaması, herhangi bir alt satır hâlâ üst satırı referans ediyorsa silme işlemini tamamen engeller. Bu işlem yanlışlıkla veri kaybını önler. Aşağıdaki örnekte, RESTRICT kısıtlaması, bir müşteriyi referans eden siparişler varsa müşterinin silinmesini önler.
-- Parent tableCREATETABLE customers (
customer_id INTPRIMARYKEY,
name VARCHAR(100));-- Child table with ON DELETE RESTRICTCREATETABLE orders (
order_id INTPRIMARYKEY,
customer_id INT,CONSTRAINT fk_orders_customers
FOREIGNKEY(customer_id)REFERENCES customers(customer_id)ONDELETERESTRICT);Altyapı:
CASCADE ile SET NULL ve SET DEFAULT
CASCADE bağımlı satırları tamamen kaldırırken, SET NULL ve SET DEFAULT alt satırları aşağıdaki şekillerde korur:
Kısıtlamanızı ON DELETE SET NULL olarak tanımladığınızda, üst satır silinir, ancak alt tablodaki yabancı anahtar değerleri NULL olarak ayarlanır.
Aşağıdaki örnekte, bir müşterinin silinmesi ilişkili siparişleri kaldırmaz. Bunun yerine, orders tablosundaki customer_id sütunu otomatik olarak NULL yapılır. Bu, sipariş kayıtlarını korurken silinen müşteriyle olan ilişkiyi koparır.
-- Child table using ON DELETE SET NULLCREATETABLE orders (
order_id INTPRIMARYKEY,
customer_id INTNULL,CONSTRAINT fk_orders_customers
FOREIGNKEY(customer_id)REFERENCES customers(customer_id)ONDELETESETNULL);Altyapı:
Benzer şekilde, SET DEFAULT seçeneğinde, bir müşterinin silinmesi ilgili siparişleri kaldırmaz. Bunun yerine, orders tablosundaki customer_id tanımlı varsayılan değerine sıfırlanır. Bu, sipariş kayıtlarını korurken onlara önceden tanımlı bir yer tutucu atar.
-- Child table using ON DELETE SET DEFAULTCREATETABLE orders (
order_id INTPRIMARYKEY,
customer_id INTDEFAULT0,CONSTRAINT fk_orders_customers
FOREIGNKEY(customer_id)REFERENCES customers(customer_id)ONDELETESETDEFAULT);Altyapı:
ON DELETE CASCADE ile Yabancı Anahtar Oluşturma
SQL’de ON DELETE RESTRICT kısıtlamasını kullanmak için, üst ve alt tablolar arasında yabancı anahtar ilişkisini kurarken bunu belirtmeniz gerekir.
Tablo şemalarında CASCADE
SQL’de ON DELETE CASCADE kuralını ya tabloları oluştururken ya da mevcut tabloları değiştirerek tanımlayabilirsiniz.
Aşağıdaki örnek, yeni bir tablo tanımlarken SQL ON DELETE CASCADE yabancı anahtar kısıtlamasının nasıl uygulanacağını gösterir. CASCADE ile, bir departmanı silmek o departmanla ilişkili tüm çalışanları otomatik olarak kaldırır.
-- Stores department detailsCREATETABLE departments (
department_id INTPRIMARYKEY,
department_name VARCHAR(100));-- Automatically deletes employees when their department is deletedCREATETABLE employees (
employee_id INTPRIMARYKEY,-- Unique employee identifier
department_id INT,CONSTRAINT fk_employees_departments
FOREIGNKEY(department_id)REFERENCES departments(department_id)ONDELETECASCADE);Altyapı:
Tablo zaten varsa, ON DELETE CASCADE ile bir yabancı anahtar kısıtlaması ekleyebilirsiniz. Böylece bir departmanı silerseniz, ilişkili tüm çalışan kayıtları otomatik olarak silinir.
-- Adds a foreign key constraint after the table already existsALTERTABLE employees
ADDCONSTRAINT fk_employees_departments
FOREIGNKEY(department_id)REFERENCES departments(department_id)ONDELETECASCADE;-- Deletes employees when the related department is deletedAltyapı:
Basamaklı zincirler ve çok seviyeli silmeler
CASCADE’in güçlü özelliklerinden biri, silmelerin tek bir ilişkiyle sınırlı kalmamasıdır. Bir alt tablo aynı zamanda başka bir tablonun üstü ise, silme işlemi birden fazla seviyeye yayılabilir; buna basamaklı zincirler denir. Örneğin, bir kullanıcının silinmesi siparişleri silebilir, bu da sipariş kalemlerini ve onların da ilişkili denetim (audit) satırlarını silebilir.
Bu nedenle, CASCADE kullanan şemaları belgelemek ve dikkatle gözden geçirmek önemlidir. Tek bir silme ifadesi birçok tabloyu etkileyebileceğinden, basamaklı davranışı etkinleştirmeden önce tam bağımlılık zincirini anlamalısınız.
ON DELETE CASCADE için Yaygın Kullanım Senaryoları
ON DELETE CASCADE kısıtlaması, alt tablodaki verilerin üst kaydı olmadan bir değeri olmadığı senaryolarda önemlidir. Gerçek dünyadaki veritabanı yönetiminde nasıl uygulandığına bakalım.
Bağımlı verileri otomatik temizleme
ON DELETE CASCADE’i, manuel temizliğin verimsiz olacağı verileri temizlemek için kullanabilirsiniz. Buna, çoğu zaman yalnızca bir üst kaydı desteklemek için var olan günlükler, geçmiş kayıtları, denetim izleri veya çoktan çoğa birleştirme tabloları gibi tablolar dahildir. Örneğin:
Bir kullanıcının silinmesi, oturum açma geçmişinin kaldırılmasını sağlamalıdır
Bir siparişin silinmesi, sipariş kalemlerinin kaldırılmasını sağlamalıdır
Bir ürünün silinmesi, ürün-kategori eşleme tablosundaki girişleri kaldırmalıdır
Veri yaşam döngüsü yönetimini basitleştirme
CASCADE’i veri yaşam döngüsü kurallarını veritabanına taşımak için de kullanabilirsiniz. İlişkili kayıtları bulmak, doğru sırayla silmek ve kenar durumları ile hataları uygulama koduyla ele almak yerine, veritabanı bu kuralları tutarlı ve atomik bir şekilde uygular.
Bu sayede, bir silme işlemi bir uygulama, bir betik veya bir yönetici sorgusu aracılığıyla tetiklense de CASCADE sonuçların her zaman tutarlı olmasını sağlar.
ON DELETE CASCADE’in Riskleri ve Tuzakları
ON DELETE CASCADE kısıtlaması kullanışlı olsa da yanlış kullanıldığında riskli olabilir. Yaygın tuzakları anlamak, etkili CASCADE kısıtlamaları tasarlamak açısından önemlidir.
İstenmeden yapılan toplu silmeler
CASCADE ile en yaygın risk, istenmeyen geniş çaplı silmelerdir. Ebeveyn tabloda tek bir DELETE ifadesi, birden çok tabloda yüzlerce hatta binlerce ilişkili satırı sessizce kaldırabilir. Bu durum, tablolar arasındaki ilişkiyi doğru anlamadıysanız geri almakta zorlanabileceğiniz beklenmedik veri kayıplarına yol açabilir.
En iyi uygulama olarak, ebeveyn ve çocuk tablolardaki yabancı anahtarlar arasındaki ilişkiyi izleyebildiğinizden her zaman emin olun. Şemayı doğru kurarsanız, tek bir silmenin hangi tabloları etkileyeceğini bilirsiniz.
Karmaşık şemalardaki gizli bağımlılıklar
Veritabanları büyüdükçe, tablolar ek yabancı anahtarlar biriktirir ve dokümantasyon gerçeklikle uyumsuz hale gelebilir. Zorluk, CASCADE bu tür ortamlarda uygulandığında ortaya çıkar; silmeler, geliştiricilerin veya yöneticilerin farkında olmadığı derin iç içe bağımlılık zincirleri boyunca yayılabilir.
Deneyimlerime dayanarak, CASCADE’i net şema dokümantasyonu ve yabancı anahtar ilişkilerinin düzenli gözden geçirilmesiyle eşleştirmenizi öneririm.
MySQL:CASCADE InnoDB ile iyi çalışır, ancak döngüsel basamaklardan kaçınır
PostgreSQL: Basamaklı silme zincirlerinde en esnek ve izin verici
SQL Server: Birden çok basamak yolu kuralları nedeniyle daha güvenli ancak daha kısıtlayıcı
İşlem kapsamı ve geri alma güvenliği
Basamaklı silmeler, orijinal silme ifadesiyle aynı işlem içinde yürütülür. Veritabanı bir alt satırı silmeye çalışırken bir hatayla karşılaşırsa, tüm işlem başarısız olur. Üst satır silinmez ve halihazırda kaldırılmış alt satırlar geri yüklenir.
Bu işlemsel davranış önemli bir güvenlik ağı sağlar. Onaylamadan önce basamaklı silmeleri test etmenize, gözden geçirmenize veya geri almanıza olanak tanır.
Doğru ON DELETE Stratejisini Seçmek
Artık doğru silme stratejisinin seçiminin verilerinizin nasıl ilişkili olduğuna ve zaman içinde nasıl davranmasını istediğinize bağlı olduğunu biliyorsunuz. Şemanız için doğru DELETE seçimini yapmak üzere aşağıdaki yönergeleri dikkate alın.
CASCADE ne zaman doğru seçimdir
Alt veriler anlamı veya varlığı açısından tamamen üst veriye bağımlı olduğunda ON DELETE CASCADE kısıtlamasını kullanmalısınız. Örneğin şunlarda kullanabilirsiniz:
Çoktan çoğa ilişkilerde birleştirme tabloları
Günlükler veya geçmiş girdileri gibi geçici veya türetilmiş veriler
Yukarıdaki durumlarda, otomatik temizlik tutarlılık sağlar ve uygulama katmanında gereken manuel silme mantığını azaltır.
Şunları öneririm: Joining Data in SQL kursumuzu alın; burada SQL’deki farklı birleştirme türlerini ve veritabanındaki farklı ilişkili tablolarla nasıl çalışılacağını öğrenirsiniz.
CASCADE’den ne zaman kaçınılmalı
Bununla birlikte, alt verilerin bağımsız bir değeri varsa veya yasal, denetim ya da analitik amaçlarla korunması gerekiyorsa şemanızda ON DELETE CASCADE kısıtlamasından kaçınmalısınız. Örneğin, şu durumlarda CASCADE kullanmayabilirsiniz:
Finansal kayıtlar ve faturalar
Sağlık verileri gibi denetim günlükleri ve uyumluluk verileri.
Bu gibi durumlarda, daha fazla kontrol ve görünürlük sağlamak için RESTRICT, SET NULL gibi kısıtlayıcı kuralları veya uygulama tarafından yönetilen silmeleri kullanmanızı öneririm.
Sonuç
SQL ON DELETE CASCADE kısıtlaması, üst satır silindiğinde bağımlı verileri otomatik olarak kaldırarak başvuru bütünlüğünü koruyan güçlü bir otomasyon aracıdır. Uygun şekilde kullanıldığında, temizliği basitleştirir, manuel silme mantığını azaltır ve uygulamalarla betikler arasında tutarlı davranış sağlar. İstenmeyen silmeleri önlemek için, veritabanı şemasındaki ilişkileri tam olarak anlamıyorsanız CASCADE kullanırken her zaman dikkatli olun.
İhtiyaçlarınıza uygun veritabanlarını nasıl oluşturup yöneteceğinizi ve uygun VTYS’yi nasıl seçeceğinizi öğrenmek için Database Design kursumuzu almanızı öneririm. Ayrıca, veri mühendisliği ve veri ambarı temellerini öğrenmek için Associate Data Engineer in SQL kariyer yolumuzu denemenizi tavsiye ederim.
Veri analitiği, iş zekâsı ve veri bilimi alanlarında pratik deneyime sahip Veri Bilimi Teknik Yazarı. SQL, Python, Power BI, Databricks ve veri mühendisliği üzerine, gerçek dünya analitik çalışmalarına dayanan, uygulamaya dönük ve sektöre odaklı içerikler yazıyorum. Yazılarım teknik derinlikle iş etkisi arasındaki köprüyü kurarak profesyonellerin veriyi güvenle karara dönüştürmelerine yardımcı olur.
SQL ON DELETE CASCADE SSS
ON DELETE CASCADE önce alt satırları mı yoksa üst satırları mı siler?⌄
ON DELETE CASCADE, başvuru bütünlüğünü korumak için önce alt satırları siler.
ON DELETE CASCADE, RESTRICT’ten nasıl farklıdır?⌄
CASCADE bağımlı satırları otomatik olarak siler, RESTRICT ise alt satırlar varsa silmeyi engeller.
ON DELETE CASCADE ile SET NULL arasındaki fark nedir?⌄
CASCADE alt satırları kaldırır; SET NULL onları tutar ama yabancı anahtar referansını temizler.
ON DELETE CASCADE geri alınabilir mi?⌄
Evet, basamaklı silmeler bir işlem içinde gerçekleşir ve commit öncesinde geri alabilirsiniz.
SQL’de ON DELETE CASCADE varsayılan davranış mıdır?⌄
Hayır, ON DELETE CASCADE’i varsayılan olarak gelmez; tablo oluştururken veya mevcut bir tabloda yabancı anahtar kısıtlamasında açıkça tanımlamanız gerekir.
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!
SQL’de veri silmek yalnızca tek bir satırı kaldırmaktan ibaret değildir. İlişkisel bir veritabanında tablolar genellikle birbirine bağlıdır ve bir tablodaki silme işlemi diğer tabloları etkileyebilir. Bunu güvenli bir şekilde yönetmek için SQL, satırlar silindiğinde veya güncellendiğinde ilişkili verilerin nasıl davranması gerektiğini tanımlamak üzere yabancı anahtar kısıtlamalarını kullanır.
En güçlü silme seçeneklerinden biri SQL
ON DELETE CASCADEkısıtlamasıdır. Bir silmeyi engellemek veya arkada yetim kayıtlar bırakmak yerine, bu kural başvurulan üst satır silindiğinde veritabanına tüm bağımlı alt satırları otomatik olarak kaldırmasını söyler.Bu eğitimde,
ON DELETE CASCADEkısıtlamasının nasıl çalıştığını, veritabanlarının neden otomatik basamaklı silmeleri desteklediğini ve ON DELETE RESTRICT gibi daha kısıtlayıcı kurallara kıyasla ne zaman doğru tercih olduğunu göstereceğim. SQL’e yeniyseniz, Introduction to SQL kursumuzla başlayın; biraz deneyiminiz varsa Intermediate SQL kursunu deneyin.SQL’de ON DELETE CASCADE Nedir?
ON DELETE CASCADEyabancı anahtar kısıtlamasının nasıl çalıştığını anlamak için önce başvuru bütünlüğünü veCASCADEifadesini açıklayayım.Başvuru bütünlüğü ve yabancı anahtarlar
İlişkisel veritabanlarında tablolar, bir tablodaki (çocuk) bir sütunu başka bir tablodaki (ebeveyn) bir birincil anahtara bağlayan yabancı anahtarlar aracılığıyla birbirine bağlanır. Yabancı anahtarlar, bir alt satırın her zaman geçerli bir üst satırı işaret etmesini sağlamak için başvuru bütünlüğünü zorunlu kılar.
Bu zorunluluk olmadan, veritabanları artık var olmayan verileri referanslayan satırların bulunduğu yetim kayıtlarla kolayca sonuçlanabilir. Bu nedenle, daha oluşmadan önce bu yetimlerle nasıl başa çıkılacağını veritabanına tam olarak söyleyen silme kuralları vardır.
CASCADE gerçekte ne anlama gelir
SQL’de
ON DELETE CASCADEkısıtlaması, silinen üst satırı referanslayan tüm alt satırların veritabanı tarafından otomatik olarak silinmesini sağlar. İşlemi yabancı anahtar zincirleri boyunca yinelemeli olarak tetikler ve bağımlı verileri tek bir atomik işlem içinde siler.Örneğin, veritabanından bir müşteri kaydını silebilir ve bu işlem, bir sorguda hem siparişlerini hem de buna bağlı olarak sipariş kalemlerini silmeye kadar basamaklanır.
ON DELETE CASCADE Pratikte Nasıl Çalışır
Artık
CASCADE’in ne yaptığını anladığınıza göre, veritabanının bu mantığı nasıl uyguladığına bakalım.Ebeveyn ve çocuk tablo ilişkileri
Artık bildiğiniz gibi, veritabanı ilişkilerinde tablolardan biri ebeveyn olarak görev yapar, birincil anahtarı tutar, diğeri ise çocuk olarak görev yapar ve bu anahtarı yabancı anahtar olarak saklar. Ebeveyn tabloda bir
DELETEifadesi çalıştırdığınızda, veritabanı motoru önce yabancı anahtar kısıtlamalarını kontrol eder ve tüm bağımlıları belirlemek için indekslemeyi hız için kullanır.Bir ebeveyn satır silindiğinde ne olur
Bir üst satırda
DELETEkomutu çalıştırdığınızda, veritabanı nihai yürütmeyi duraklatır ve yabancı anahtar kurallarını aşağıdaki sırayla kontrol eder:Yukarıdaki sürecin yalnızca, makalenin ilerleyen kısımlarında göreceğimiz üzere,
ON DELETE CASCADEkısıtlamasını tanımladıysanız gerçekleşeceğini unutmayın.ON DELETE CASCADE ve Diğer Silme Kuralları
SQL’de, veritabanına farklı tablolardaki ilişkili verilerin nasıl ele alınacağını söyleyen farklı
DELETEkuralları vardır. Bu bölümde,ON DELETE CASCADE’i bu kısıtlamalarla karşılaştıracağız.CASCADE ve RESTRICT
Yukarıdaki açıklamadan gördüğümüz üzere
CASCADE, bir üst satır kaldırıldığında tüm bağımlı alt satırları otomatik olarak siler ve geride yetim kayıt kalmamasını sağlar.Buna karşılık SQL
RESTRICTkısıtlaması, herhangi bir alt satır hâlâ üst satırı referans ediyorsa silme işlemini tamamen engeller. Bu işlem yanlışlıkla veri kaybını önler. Aşağıdaki örnekte,RESTRICTkısıtlaması, bir müşteriyi referans eden siparişler varsa müşterinin silinmesini önler.CASCADE ile SET NULL ve SET DEFAULT
CASCADEbağımlı satırları tamamen kaldırırken,SET NULLveSET DEFAULTalt satırları aşağıdaki şekillerde korur:Kısıtlamanızı
ON DELETE SET NULLolarak tanımladığınızda, üst satır silinir, ancak alt tablodaki yabancı anahtar değerleriNULLolarak ayarlanır.Aşağıdaki örnekte, bir müşterinin silinmesi ilişkili siparişleri kaldırmaz. Bunun yerine,
orderstablosundakicustomer_idsütunu otomatik olarakNULLyapılır. Bu, sipariş kayıtlarını korurken silinen müşteriyle olan ilişkiyi koparır.Benzer şekilde,
SET DEFAULTseçeneğinde, bir müşterinin silinmesi ilgili siparişleri kaldırmaz. Bunun yerine,orderstablosundakicustomer_idtanımlı varsayılan değerine sıfırlanır. Bu, sipariş kayıtlarını korurken onlara önceden tanımlı bir yer tutucu atar.ON DELETE CASCADE ile Yabancı Anahtar Oluşturma
SQL’de
ON DELETE RESTRICTkısıtlamasını kullanmak için, üst ve alt tablolar arasında yabancı anahtar ilişkisini kurarken bunu belirtmeniz gerekir.Tablo şemalarında CASCADE
SQL’de
ON DELETE CASCADEkuralını ya tabloları oluştururken ya da mevcut tabloları değiştirerek tanımlayabilirsiniz.Aşağıdaki örnek, yeni bir tablo tanımlarken SQL
ON DELETE CASCADEyabancı anahtar kısıtlamasının nasıl uygulanacağını gösterir.CASCADEile, bir departmanı silmek o departmanla ilişkili tüm çalışanları otomatik olarak kaldırır.Tablo zaten varsa,
ON DELETE CASCADEile bir yabancı anahtar kısıtlaması ekleyebilirsiniz. Böylece bir departmanı silerseniz, ilişkili tüm çalışan kayıtları otomatik olarak silinir.Basamaklı zincirler ve çok seviyeli silmeler
CASCADE’in güçlü özelliklerinden biri, silmelerin tek bir ilişkiyle sınırlı kalmamasıdır. Bir alt tablo aynı zamanda başka bir tablonun üstü ise, silme işlemi birden fazla seviyeye yayılabilir; buna basamaklı zincirler denir. Örneğin, bir kullanıcının silinmesi siparişleri silebilir, bu da sipariş kalemlerini ve onların da ilişkili denetim (audit) satırlarını silebilir.Bu nedenle,
CASCADEkullanan şemaları belgelemek ve dikkatle gözden geçirmek önemlidir. Tek bir silme ifadesi birçok tabloyu etkileyebileceğinden, basamaklı davranışı etkinleştirmeden önce tam bağımlılık zincirini anlamalısınız.ON DELETE CASCADE için Yaygın Kullanım Senaryoları
ON DELETE CASCADEkısıtlaması, alt tablodaki verilerin üst kaydı olmadan bir değeri olmadığı senaryolarda önemlidir. Gerçek dünyadaki veritabanı yönetiminde nasıl uygulandığına bakalım.Bağımlı verileri otomatik temizleme
ON DELETE CASCADE’i, manuel temizliğin verimsiz olacağı verileri temizlemek için kullanabilirsiniz. Buna, çoğu zaman yalnızca bir üst kaydı desteklemek için var olan günlükler, geçmiş kayıtları, denetim izleri veya çoktan çoğa birleştirme tabloları gibi tablolar dahildir. Örneğin:Veri yaşam döngüsü yönetimini basitleştirme
CASCADE’i veri yaşam döngüsü kurallarını veritabanına taşımak için de kullanabilirsiniz. İlişkili kayıtları bulmak, doğru sırayla silmek ve kenar durumları ile hataları uygulama koduyla ele almak yerine, veritabanı bu kuralları tutarlı ve atomik bir şekilde uygular.Bu sayede, bir silme işlemi bir uygulama, bir betik veya bir yönetici sorgusu aracılığıyla tetiklense de
CASCADEsonuçların her zaman tutarlı olmasını sağlar.ON DELETE CASCADE’in Riskleri ve Tuzakları
ON DELETE CASCADEkısıtlaması kullanışlı olsa da yanlış kullanıldığında riskli olabilir. Yaygın tuzakları anlamak, etkiliCASCADEkısıtlamaları tasarlamak açısından önemlidir.İstenmeden yapılan toplu silmeler
CASCADEile en yaygın risk, istenmeyen geniş çaplı silmelerdir. Ebeveyn tabloda tek birDELETEifadesi, birden çok tabloda yüzlerce hatta binlerce ilişkili satırı sessizce kaldırabilir. Bu durum, tablolar arasındaki ilişkiyi doğru anlamadıysanız geri almakta zorlanabileceğiniz beklenmedik veri kayıplarına yol açabilir.En iyi uygulama olarak, ebeveyn ve çocuk tablolardaki yabancı anahtarlar arasındaki ilişkiyi izleyebildiğinizden her zaman emin olun. Şemayı doğru kurarsanız, tek bir silmenin hangi tabloları etkileyeceğini bilirsiniz.
Karmaşık şemalardaki gizli bağımlılıklar
Veritabanları büyüdükçe, tablolar ek yabancı anahtarlar biriktirir ve dokümantasyon gerçeklikle uyumsuz hale gelebilir. Zorluk,
CASCADEbu tür ortamlarda uygulandığında ortaya çıkar; silmeler, geliştiricilerin veya yöneticilerin farkında olmadığı derin iç içe bağımlılık zincirleri boyunca yayılabilir.Deneyimlerime dayanarak,
CASCADE’i net şema dokümantasyonu ve yabancı anahtar ilişkilerinin düzenli gözden geçirilmesiyle eşleştirmenizi öneririm.Düzenli olarak veritabanı tasarlıyor veya bakımını yapıyorsanız, SQL Server for Database Administrators yetkinlik yolumuzu denemenizi tavsiye ederim.
Veritabanına Özgü Notlar ve Davranış
ON DELETE CASCADEkavramı ilişkisel veritabanları genelinde standart olmakla birlikte, her motor temeldeki yürütmeyi küçük farklılıklarla ele alır.PostgreSQL, MySQL ve SQL Server davranışı
PostgreSQL, MySQL ve SQL Server hepsi
ON DELETE CASCADE’i destekler ve aşağıdaki istisnalarla benzer şekilde uygular:MySQL:
CASCADEInnoDB ile iyi çalışır, ancak döngüsel basamaklardan kaçınırPostgreSQL: Basamaklı silme zincirlerinde en esnek ve izin verici
SQL Server: Birden çok basamak yolu kuralları nedeniyle daha güvenli ancak daha kısıtlayıcı
İşlem kapsamı ve geri alma güvenliği
Basamaklı silmeler, orijinal silme ifadesiyle aynı işlem içinde yürütülür. Veritabanı bir alt satırı silmeye çalışırken bir hatayla karşılaşırsa, tüm işlem başarısız olur. Üst satır silinmez ve halihazırda kaldırılmış alt satırlar geri yüklenir.
Bu işlemsel davranış önemli bir güvenlik ağı sağlar. Onaylamadan önce basamaklı silmeleri test etmenize, gözden geçirmenize veya geri almanıza olanak tanır.
Doğru ON DELETE Stratejisini Seçmek
Artık doğru silme stratejisinin seçiminin verilerinizin nasıl ilişkili olduğuna ve zaman içinde nasıl davranmasını istediğinize bağlı olduğunu biliyorsunuz. Şemanız için doğru
DELETEseçimini yapmak üzere aşağıdaki yönergeleri dikkate alın.CASCADE ne zaman doğru seçimdir
Alt veriler anlamı veya varlığı açısından tamamen üst veriye bağımlı olduğunda
ON DELETE CASCADEkısıtlamasını kullanmalısınız. Örneğin şunlarda kullanabilirsiniz:Yukarıdaki durumlarda, otomatik temizlik tutarlılık sağlar ve uygulama katmanında gereken manuel silme mantığını azaltır.
Şunları öneririm: Joining Data in SQL kursumuzu alın; burada SQL’deki farklı birleştirme türlerini ve veritabanındaki farklı ilişkili tablolarla nasıl çalışılacağını öğrenirsiniz.
CASCADE’den ne zaman kaçınılmalı
Bununla birlikte, alt verilerin bağımsız bir değeri varsa veya yasal, denetim ya da analitik amaçlarla korunması gerekiyorsa şemanızda
ON DELETE CASCADEkısıtlamasından kaçınmalısınız. Örneğin, şu durumlarda CASCADE kullanmayabilirsiniz:Bu gibi durumlarda, daha fazla kontrol ve görünürlük sağlamak için
RESTRICT,SET NULLgibi kısıtlayıcı kuralları veya uygulama tarafından yönetilen silmeleri kullanmanızı öneririm.Sonuç
SQL
ON DELETE CASCADEkısıtlaması, üst satır silindiğinde bağımlı verileri otomatik olarak kaldırarak başvuru bütünlüğünü koruyan güçlü bir otomasyon aracıdır. Uygun şekilde kullanıldığında, temizliği basitleştirir, manuel silme mantığını azaltır ve uygulamalarla betikler arasında tutarlı davranış sağlar. İstenmeyen silmeleri önlemek için, veritabanı şemasındaki ilişkileri tam olarak anlamıyorsanızCASCADEkullanırken her zaman dikkatli olun.İhtiyaçlarınıza uygun veritabanlarını nasıl oluşturup yöneteceğinizi ve uygun VTYS’yi nasıl seçeceğinizi öğrenmek için Database Design kursumuzu almanızı öneririm. Ayrıca, veri mühendisliği ve veri ambarı temellerini öğrenmek için Associate Data Engineer in SQL kariyer yolumuzu denemenizi tavsiye ederim.