Soru & Cevap

Veri Tabanı birden fazla tabloda sorgulama ...

01.04.2018 - 01:41

Arkadaşlar amatör olarak 1 yıldır android dersleri izleyip kücük uygulamalar yapıyorum. Fakat aklımda bir uygulama var ama veri tabanı birden fazla tablodan oluşuyor ve bunu nasıl modellemem gerektiğine karar veremedim yardımcı  olacak arkadaş olur mu şansımı denemek istedim. şimdiden teşekürler.

yapmak istediğim şeyi anlatayım önce;

Bir atölye düşünün 15 tane çalışanı var (sonra artabilir) bu çalışanlar 15 tane (sonra artabilir) iş makinasının arızalarına 3 er kişilik ekipler olarak göreve gidiyor. Bir ustanın o ay kaç kere göreve gittiğini, bir göreve hangi ustaların gittiğini (3 her seferinde 3 farklı usta gidebiliyor) tablolarımı nasıl şekillendirmem ve sorgulamam lazım.


      -Ustalar
usta_id
usta_isim
usta_durum
     -Makinalar
mak_id
mak_plaka
mak_isim
mak_tip
    -Gorevler
gorev_id
is_emri
mak_id
usta_id
gorev_bas_tarih
gorev_bit_tarih
ariza
not
lokasyon
 

6 Görüntülenme

2 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-87289-1569234090.png
yakupgovler
29.09.2019 - 03:23

Veritabanı tasarlamak kolay bir şey değildir. Veritabanlarını normalizasyon işlemlerine tabi tutarak tasarlamak gerekir ki hem fazla veri tekrarından hem de esnek bir veritabanı yapısıyla birçok ihtimali göz önüne alarak işlem yapabilmeyi mümkün kılsın.

Örneğin;

    -Gorevler
gorev_id
is_emri
mak_id
usta_id
gorev_bas_tarih
gorev_bit_tarih
ariza
not
lokasyon

şeklinde tanımladığınız tablo normalizasyona uymuyor. Bir tabloda o tablo ile ilgili olmayan bir alana yer verilmez. Bu tabloda işe gidecek tek usta olsaydı sorun olmayacaktı ama bir göreve 3 usta gittiği için bu tabloda 3 ustayı tanımlamak için ya üç ayrı görev kaydı yapmak gerekecekti ya da usta_id alanına üç ustanın da ID'sini kaydetmek gerekecekti ki bu da başka bir normalizasyon kuralına aykırı olacaktı.

Yapılacak iş, görevlendirmeler adında bir tablo daha oluşturup, bir göreve hangi ustalar gitmişse onun kaydını tutmam olacak, bu tabloları da inner join ile filtreleyip, istenilen bilgiler elde etmek olacaktı.

Soruyu sorup, cevabını da bulup, paylaştığınız için teşekkürler.

Profile picture for user celilkeskin09
celilkeskin09
10.04.2018 - 01:22

arkadaşlar araya gorevlendirme isminde bir tablo oluşturarak sorunu çözdüm.

 

SELECT
ustalar.usta_isim
from gorevler
inner join gorevlendirme on gorevler.gorev_id=gorevlendirme.gorevID
inner join makinalar on gorevler.mak_id=makinalar.mak_id
inner join ustalar on gorevlendirme.UstaID=ustalar.usta_id
where gorevler.gorev_id=6

 ve


SELECT
gorevler.gorev_lok, gorevler.gorev_ariza,
makinalar.mak_no, makinalar.mak_tip,
ustalar.usta_isim,ustalar.usta_durum,
gorevler.is_emrino
from gorevler  
inner join gorevlendirme on gorevlendirme.gorevID=gorevler.gorev_id
inner join ustalar on gorevlendirme.UstaID=ustalar.usta_id
inner join makinalar on gorevler.mak_id=makinalar.mak_id

ve

İkiden fazla tablo birleştiriminde syntax aşağıdaki gibidir:
SELECT listelenmesini istediğimiz kolonlar FROM tablo1Adı
INNER JOIN tablo2Adı ON tablo1.kolon1 = tablo2.kolon2

kod bloklarını projenize uyarlayabilirsiniz