Büyük uygulamalar için aynı veritabanındaki farklı şemalardaki tablolarda yabancı anahtarlar oluşturmak kötü bir fikir mi?


13

Adanmış sunucuya büyük bir pl / sql web tabanlı uygulama aktarımı üzerinde çalışıyorum. Bu uygulama 70 paket program kodu ile bir şemada yer almaktadır. Bu uygulama farklı zamanlarda yaklaşık 15 kişiye yapılmıştır. Farklı şemalardaki referans tablolarında yabancı anahtarlar oluşturmak bizim için normal bir uygulamadır, çünkü gerçekten rahattır ve veritabanını çok temiz tutar, çünkü aynı refernce tablolarını farklı bir şemada tutmamız gerekmez.

Ama yine de (DB ile yeni bir örnek oluşturan ve başvurumu Solaris bölgesinin içine kopyalayan) DBA'm bugün çok sert dedi, "Farklı şemalardaki yabancı anahtarlar kötüdür ve onu yok etmelisin!". Bakış açısını açıklamadı.

Bunu büyük uygulamalarla yapmak gerçekten kötü bir fikir mi?


13
DBA'nız işten çıkarılmalıdır.
Colin 't Hart

1
Hepimiz söyledikleri buysa DBA'nızın bir salak olduğunu çığlık atacağız, ancak DBA'nızın argümanı için başka bir bağlam olmadığından emin misiniz?
Kermit

1
belki DBA sadece geliştiricilerin bu şeyi inşa etmek için yaptığı saçma işi desteklemek için elinden geleni yapıyor.
13'te

2
Öte yandan, @swasheck yapmak size veritabanı bu DBA altında tutarsızlıklar birkaç yıl birikmiş sonra işini yapmak istiyorum?
Twinkles

Hiç @Twinkles değil
swasheck

Yanıtlar:


6

Benimle birlikte - SQL Server'dan geliyorum ve kehanetten nefret ediyorum, ama bence tartışma hala duruyor.

Şemalar, tabloları mantıksal alt sistemlerden izole etmekte fayda vardır. Yabancı anahtarlar veri bütünlüğünü garanti eder. Bunlar dikey kavramlardır - alt sistemler arasındaki veri bütünlüğü de bir zorunluluktur. Muhasebe ve Nakliye ile Muhtemelen Merkezi Müşteri Verileri, müşterinin muhasebe işlemlerinde kullanılırken silinebileceği silolarda bulunmaz.

Bu nedenle, DBA'nın gerekliliğinin bir yetersizlik işareti olduğunu düşünüyorum. Lütfen herkes içeri girebilir ve karşı argüman sağlayabilir - mutlu olurum. Ama bu şekilde SQL Server'da yapıyorum (yine de, şema tanımımız oracle tanımından farklı bir LITTLE olmasına rağmen).


4

Ayrıntılı akıl yürütmeden yabancı anahtar kısıtlamalarının yok edilmesini talep etmek aptalca olsa da, dış referansları kontrol altında tutmak mantıklıdır. Başvurduğunuz şemalar yeni sunucunuzda farklı adlandırılırsa ne olur?

Oracle'da, geçerli şemanın dışındaki nesneler için SYNONYMS oluşturarak bu sorunu çözersiniz.


1
Eşanlamlıları aşırı kullanabilir ve "bu ne anlama geliyor?" Sorusunu daha da karıştırabilirsiniz. Güvenlik, performans ve en iyi uygulamalar hakkında daha fazla bilgi için buraya bakın stackoverflow.com/a/10042117/851930
kevinsky

3
Eş anlamlı sözcükler yabancı anahtar kısıtlamalarının hedefi olarak kullanılamaz.
Colin 't Hart

Geçerli noktalar. Ve başkalarına, haklarını ve tehlikelerini tartışma fırsatı vermeden açıklama yapmanın kötü olduğuna dair daha fazla kanıt.
Twinkles

2

Herhangi bir şemayı farklı bir veritabanına taşıma gereksiniminiz (alan / güvenlik / her neyse) varsa, artık başvuruları işleyemezsiniz. Muhtemelen referansların öldürülmesini istemenin ana nedeni budur.


0

Bunu yapmaktan hayal edebileceğim tek "kötü fikir", REFERENCES nesne ayrıcalığını (tabloya başvuran bir kısıtlama oluşturmak için gerekli olan) bir role veremezsiniz. Şema / kullanıcı tarafından şema / kullanıcı tarafından yapılmalıdır.

Bunun yanında DBA'nızın amacını görmüyorum.


0

Şunu düşünün: Alt tablo sahibi şeması, tablosunda kayıt oluşturmaya başlar ve farkında olmadan üst tablo şeması kullanıcısının üst tablodan kayıtları silmesini önler. Beklediği ve takdir ettiği bir şey mi?

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.