Bu Mysql Yabancı Keys için bir iş midir?

5 Cevap php

Son birkaç yıl içinde ben MySQL Yabancı Keys makaleleri bol olsa da son bir şey okudum. Çünkü ben 100 mesaja ait bu konuyla bağlantılı bir konuyu silerseniz, bunun altında çocuk sonrası vardır bir forum başlığı gibi bir şey kullanmak iyi biliyorum, yabancı anahtarlar benim için bu 100 konu silmek yapacak, ben bugüne kadar doğru duyuyorum ?

Php / mysql bir sosyal ağ üzerinde çalışıyorum, sonra oradaki Kullanıcı Kimliği alanında tarafından bu tabloya bağlı yaklaşık 10 diğer tablolar, I bu yabancı tuşlarını kullanarak gereken bir kullanıcı ID'si ile kullanıcı tablo var? Ben şimdiye kadar tüm tabloları güncellemek gerek kalmayacak bir kullanıcı orada hesabını siler örneğin, geçmişte ben 10 gibi PHP çalıştırmak kullanıcı için her masada sorgular, 1 silme olurdu. Yabancı anahtarları üzerinde kullanarak iyi bir iş gibi geliyor bu ses?

5 Cevap

Yabancı anahtarlar veri silme işi yapmıyoruz. Onlar ana tablodan geçerli olmayan bir alana veri girmek yok sağlamak. yani siz kullanıcıların tablodaki bir UserId 100 yoksa bir alt tabloda KullanıcıNo 100 ile bir kayıt girmeniz mümkün olmaz.

Bir yabancı anahtar basamaklı siler kullanarak söyleniyor ne soran yapmak, ama bu gerçekten ne istediğinizi emin olacaktır. Onların hesabı silmek eğer gerçekten silinecek belirli bir kullanıcı tarafından gönderilen tüm mesajları istiyorum, ve tüm yol parçacığı aşağı ana mesaj için mesaj cevap yok.

Eğer gerçekten basamaklı gerçekten doğru değil, verilerinizi pisliğini siler kullanmak için ne yaptığını bilmek gerekir.

Eğer yabancı anahtarları kullanarak, size başvurulan kaydın silinmesi üzerine bir referencial action gerçekleştirmek için MySQL belirtebilirsiniz. Örneğin, bir yabancı anahtar alanını "CASCADE'a" belirterek ifade tablodaki birincil anahtara başvuruda herhangi bir kayıt silmek için MySQL söyleyecektir. "SET NULL" başvuru eylem bu diğer tablodaki atıfta kayıt silindiğinde NULL yabancı anahtar alanını koyacaktır.

Başka bir şey daha, bir Foreign Key iki tablo arasında bir başvuru sınırlamadır.

Eğer on delete cascade (see 13.6.4.4. FOREIGN KEY Constraints) ile InnoDB tabloları varsa, size açıklamak ne elde etmek için kullanılabilir, ancak bu kesinlikle yabancı kullanmak hangi için ilk nedeni değil tuşları.

if I delete a topic with 100 post's connected to that topic, foreign keys will make it delete those 100 topics for me, am I correct so far?

Yani çağlayan set siler olup olmamasına bağlıdır. Cascade siler iyi olabilir, ama bir olmasını "önemli" şeyler neden olabilir silmek çünkü iyice etkileri anlamak zorundayız. Ama evet, hedef basamaklı siler tek bir silme, yabancı anahtarlar ile kayıtların bir hiyerarşi silmek için ise uygun bir seçenektir.

I won't ever need to update all the tables but for example if a user deletes there account, in the past I would have the PHP run like 10 delete queries, 1 on each table for the user. Does this sound like a good job to be using Foreign Keys on?

Evet, bu yabancı anahtarları büyük bir kullanımıdır. FKS temel amacı, belirli bir tablo kesinlikle var atıfta emin kullanıcı olmak için, senin durumunda, temelde, 'başvuru bütünlüğü' olarak adlandırılan korumaktır. CASCADE özelliği ile kullanıcıyı silerken istediğiniz eylemi seçebilirsiniz. Bu, FK başvuru satırları silmek için şu satırlarda user_id null olarak veya sadece oluyor silme sorgusu duracaktır seçebilirsiniz.

http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html

Bu arada, MyISAM FKS desteklemiyor, sessizce onları görmezden olacaktır. Bunun için InnoDB kullanmalısınız.