Eğer bir yabancı anahtar kullanmak olmaz nedenleri?

6 Cevap php

Ben şirket anketler oluşturmak için kullandığı eski bir web uygulaması üzerinde çalışıyorum. Ben mysql komut istemi ile veritabanı şeması baktı ve tablolar oldukça sağlam görünüyordu düşündüm. Ben de bunun arkasındaki teori (benim yazılım mühendisliği programında bir kaç veritabanı tasarım dersleri almış olan) tecrübeli olduğum bir DB gurusu değilim ama.

Söyleniyor, ben bir SQL dosyasına oluşturmak ifadeler dökülüyor ve MySQL Workbench bunları ithal ve herhangi bir "gerçek" yabancı anahtarların hiçbir faydalanmak olduğunu gördüm. Onlar bir FK ile yapardım ama onlar biri olarak ilan yok gibi başka bir tablonun birincil anahtarı saklamak gerekir.

Bu yüzden onların DB belki bunun arkasında bir neden var olduğunu merak terk ediyorum (eksi FK sorunu) Biliyorum ne ben üzerinden olacağını şekilde tasarlanmıştır nasıl görüyoruz. Bu tembel programlama bir vaka mı yoksa programlı tüm hata denetimi yaparak bazı performans kazançları alabilir?

Eğer onlar temelde Anketler var ve bir anket Sorular bir dizi var bir örnek istiyorum. O bir sütun PK bulunuyor tutan böylece bir soru anketin parçasıdır. Bu oldukça fazla ama onlar her yerde kullanabilirsiniz.

Ben herhangi bir fikir :) (Ben bu soruyu doğru / yanlış cevap olmayabilir ama ben bunu kullanmaya başladığımdan beri oldukça katı olmuştur daha bu sistemi olarak bunu neden bazı bilgiler arıyorum anlıyorum takdir ediyorum bu yüzden) bu adamlar ne yaptıklarını biliyordu inandýrdý

6 Cevap

Orijinal geliştiricileri MyISAM veya yabancı anahtar kısıtlamalarını desteklemeyen herhangi diğer depolama motorunu kullanmayı tercih olabilir.

MySQL sadece InnoDB tabloları üzerinde fiili yabancı anahtar ilişkileri tanımlayan destekler, belki senin MyISAM, ya da başka bir şey mi?

Daha da önemlisi doğru sütunlar endeksleri üzerinde tanımlı olan (yani başka bir tablonun PK tutan olanlar endeksli olmalıdır) olmasıdır. Bu MyISAM da mümkündür.

Uber büyük veritabanları (türüTeradata destek) üzerine onlar Yabancı tuşlarını kullanmak gerekmez bulabilirsiniz. Nedeni performanstır. Eğer bir tablodaki tüm fk bulunuyor kontrol etmek zorunda eklenen yükü var, bir veri ambarı genellikle yeterli veritabanına yazmak her zaman. Zaten bunun doğru olduğunu biliyorsanız, ne anlamı var.

Küçük bir db iyi tasarım sadece onları koymak anlamına gelecektir, ama onları dışarı bırakarak olduğu için performans artışı vardır.

Genel noktaları olarak; tuşları okur (onlar okuma alarak yere uygulanabilir eğer iyileştirici yardım) ve (onlar tablolar havai eklemek için) yazıyor yavaşlatmak hızlandırmak.

Durumlarda onlar yazıyor eklemek küçük yükü ağır basar okuma ve tutarlılığı bakımı için hız iyileştirme büyük çoğunluğu.

Ancak Amazon, Twitter ya da benzerleri için çalışıyoruz sürece bu çok uygun değil - Bu ayrım gibi pek çok aslında 'canlı' veritabanı vurmak değil çok büyük sitelerde okur vb yansıtma, cacheing tarafından bulanık olmuştur.

Burada bir yabancı anahtar kullanarak değilim gerçek bir hayat örneğidir.

Ben çocuk yok bir ebeveyn çocuk ilişkisini saklamak için bir yol gerekli ve çocuğun soyut bir sınıftır. Çocuk birkaç türde olabilir beri, ben çocuğun kimliği listelemek için çocuğun tipini ve bir alan adına bir alan kullanabilirsiniz. Uygulama, mantık, yönetir.

Ben bu iyi tasarım kararı olsaydı emin değilim, ama ben tarihine altına ile gelebilir iyi oldu. O kadar iyi çalışma oldu!

Gerçekten yabancı tuşlarını kullanmak zorunda değilsiniz.

Bunları yoksa, veri tutarsız olmuş olabilir ve kaskad siler ve güncelleştirmeleri kullanmak mümkün olmayacaktır.

Bunları varsa nedeniyle nedeniyle şema değişiklikleri olur SQL tablolarda hata için kullanıcıların bazı verileri kaybedebilirsiniz.

Bazıları onlar olmadan hayat tercih, onları tercih ederler. Hiçbir gerçek avantajları iki durumda da içinde var.