Iki-çok veri ilişki olarak tedavi edilmelidir çok-çok?

7 Cevap php

Takımlar ve Oyunlar: ben 2 veritabanı tabloları var.

Bu sorunun amaçla, futbol (futbol) ekipleri ve oyunlar ile ilgileniyor.

Bazen her iki takım nötr olabilir ancak her Oyunu tam 2 takım, genellikle ev sahibi takımı ve deplasman ekibi var.

Benim soru Oyunlar tabloda 2 yabancı anahtarlar (home_team_id, away_team_id) kullanarak bu veri ilişkiyi temsil edip ya da ben gerekir bu durumda, iki bağlamak için games_teams tablo ile bir çok-çok ilişkisi kullanmalısınız olup olmadığıdır Ayrıca takım ev ya da uzak ekip oldu ve biraz overkill görünüyor olmadığını saklamak için.

Karışıklığa eklemek için, ben KohanaPHP de ORM kütüphanelerini kullanıyorum ve bu team_id çağrılacak bir fk veya bir bağlantı tablo sadece 2 sütun içeren beklenebilir. Eğer KohanaPHP bu sorun ile deneyiminiz varsa o zaman genel bir tavsiye de çok takdir başka bir yanıt bırakın lütfen.

7 Cevap

Eğer veritabanı sunucusu üzerinde bir "X. Normal Form" rozeti tutturmak mümkün olmak istiyorsanız, o zaman muhtemelen çok-çok, aksi takdirde, ben 1 daha az tablo ile sorgu giderlerini azaltmak düşünüyorum gerektiği gibi tedavi edilmesi gerektiğini Eğer sadece bazı yararlı verileri istiyorum every zaman içinde katılmak için gidiyoruz.

Sadece aksi takdirde sadece marangoz tabloda bunu hak gerekiyordu, iki sütun kullanabilirsiniz. Bu bir uyku saatli bomba olduğunu ve bir gün aniden size birçok gerçek çok olması gerekir keşfedeceksiniz sanki değil.

2 sütun burada bence mükemmel uygundur. Muhtemelen sadece herhangi bir oyun için iki takım olamayacağı gerçeği iki sütun alarak veritabanı şema yansıtılır. Bir bağlantı tablo konulmasıyla, tek bir oyunu 2 uzaklıkta 2 ev ekipleri, ekipleri sahip olabileceği olasılığını tanıtmak, ve bu senaryo gerçekleştiğinde asla emin olmak için ek doğrulama gerekir. Iki sütun izole şeyler tutarak, şema doğal veri bütünlüğünü zorlar.

Normalleştirme açısından: Evet. Orada sadece bir-çok veya çok-çok bir veya daha fazla bir-çok ilişkileri bölünür alır.

Ben CİNSİYET gibi bir şey kurtarmak olsaydı Ama gerçekçi, konuşma. Ben gerçekten çok devlet ve buna bağlı bir datetime damga gerekir?

Şaşırtıcı cevabı EVET - ama iş nedeniyle cinsiyet değişiklikleri izlemek gerek yalnızca - en pratik amaçlar için cevap HAYIR.

Ben iki tuşları ile bir tablo tutmak gibi - onu izlemek için bir iş neden olmadıkça.

Normalize until it hurts, denormalize until it works. :)

Bunu soyutlamak nasıl bağlı, ben futbol oyunu daha doğru, Oyun tablodaki sütunları sahip değil sadece daha uygun olduğu durumda, iki takım var ZORUNLU olduğunu söyleyebilirim.

Hatta Oyunu birincil anahtar takım kimliği 'olmanın doğal parçaları düşünebiliriz.

Tamamen bunun için ayrı bir tablo var DEĞİL gerektiğini düşünüyorum. , Programcı kolay DB daha kolay. Zaten var gibi ne IFS düşünmek iyi, ama sesler. Bu normalleştirme düşünme yakalanmak etmeyin, her zaman her şey için gitmek yoludur.

Ben iki sütunu kullanarak en iyi seçim olduğunu söyleyerek diğer cevaplar saygı, ancak, size Kohana de ORM kitaplığı kullanıyorsanız söz. Oyun tabloda iki sütun kullanarak çok-çok ilişkileri için ORM özelliklerini kaybederler. Bir games_teams özet tablo kurarsanız, aşağıdakileri yapabilirsiniz:

$game = ORM::factory('game', 1); // 1 is the game id

Sonra o oyunda ekipleri aracılığıyla döngü yapabilirsiniz:

foreach ($game->teams as $team) {
// do stuff with $team
}