Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Veritabani tasarımı...

Konu, 'Veritabanları' kısmında sinankaya tarafından paylaşıldı.

  1. sinankaya

    sinankaya Yeni Üye

    Kayıt:
    19 Ekim 2002
    Mesajlar:
    9
    Beğenilen Mesajlar:
    0
    Meslek:
    offfffff
    Selam arkadaşlar, bu soruyu php.org.tr de sordum 2 haftadır tık yok belki burada en azından bi yanıt alabilirim...

    MYSQL 'de bir personel veritanı oluşturmak istiyorum. Bu veritabanında personel hakkında
    genel bilgilerinin dışında maaş bilgileri olsun istiyorum.
    Fakat maaş bilgilerinin aylık ve yıllık bazda veritabanında olması gerekiyor.(nedense)şöyleki:
    Sadece personele ait maaşların tutulduğu tabloda olması gereken bilgiler şöyle:
    PersonelID ARALIK-2001 OCAK 2002 MAAŞI ŞUBAT.. diye devam eder
    ------------- ----------- ------------------ ------------------
    1 10000000 200000000 20000000000 gibi
    2 100000000 100000000 100000000000

    (Bu tabi veritabanının en basit hali düzenlenmemiş hali)
    Burada sorun: her maaş donemi icin yeni bir sutun acılması.
    Örneğin:1 nolu personelin ocak-2003 icin yeni bir sutun gerekiyor,sanırım buda kotu bir yontem.
    Şu bilinen normalizasyon adımlarını uygulayarak sadece maaş tablosu oluşturmaya çalıştım.
    Şoyle 3 tablo ortaya çıktı. Bunlar : Maaş(MaaşID,MAAŞ), MaaşDonemi(MaaşDonemID,MaaşDonemi)
    ve son olarak da personel,maaş ve MaaşDonemi tabloları arasındaki ilişkileri duzenleyen
    ilişki tablosu : iliski(iliskiID, PersID, DonemID, mID)
    Buradaki sorun ise işin daha da karmaşık hale gelerek querylerin zorlaşması ve
    hataya açık olması ve 10 yıl icinde oluşabilecek kayıt miktarlarından toplam olarak yaklaşık
    28000 hucreyi dolduracak.
    Başka bir yontemde ise
    MAAŞ(PersNo,Yıl,Ocak,Şubat,Mart,Nisan,Mayıs,Haziran,Temmuz,Ağustos,Eylül,Ekim,Kasım,Aralık)
    kullanıyorum (tabi bu uydurmaca...) ancak 500 satırda 7000 hucrede olay bitiyor.(ornek DB için)
    Başka başka bir yontemde ise (ki bu yukarıdaki nin satır-sutun yerdeğişmesi :
    MAAŞ(PersNo,Donem,maaş) ile 6000 satır da toplam 18000 hucrede olay biter.
    (Cok uzun yazdım galiba umarım anlarsınız arkadaşlar...)

    Şimdi sorular...
    1. Bir veritabanında hucre sayısı ne kadar onemlidir.
    2. Satırlara girilecek bilgilerin sabit sutunlara yayılması ile elde
    edilen hucre sayısındaki azalma degerli midir? (2. ve 3 yontem de oldugu gibi)
    3. Yukarısı cok uzun ve biraz da karmaşık oldu siz bu veritabanı nı nasıl duzenlerdiniz ?

    Yardımlarınız için teşekkurler.
    :confused:
     
  2. norda_krepusko

    norda_krepusko Üye

    Kayıt:
    5 Ekim 2002
    Mesajlar:
    95
    Beğenilen Mesajlar:
    0
    Meslek:
    bt
    Şehir:
    @home
    direk cevap veriyorum,
    3- ben olsam,
    tablo : personel
    ID : Auto_Increment INT 10 PK
    Isim : Varchar 10
    Soyad :VarChar 10

    tablo : ucret
    ID : Auto_increment INT 10 PK
    Maas : Int 10

    tablo : Odemeler
    ID : Auto_increment INT 10 PK
    Pers_ID : Int(10)
    Maas_ID : Int(10)
    Zaman : TimeStamp

    Boylece cok basit select cumleleri ile, kim hangi zamanda ne kadar maas almis gayet rahat gorebilirsin,

    Mesela gecen sene ocak ayinda, tum kullanicilarin maasini gormek icin,

    Select
    Od.Maas_ID, Od.Pers_ID
    From Odemeler Od
    Where Zaman > '20010100000000' And Zaman < '20010200000000'

    diyebilirsin. Tabii personel ismini falanda listelemek ve maaslari da gormek istersen, joinleri hemen ekleyerek

    Select
    Od.Maas_ID, Od.Pers_ID , P.Isim, P.Soyad, Uc.Maas
    From Odemeler Od, Ucret Uc, Personel P
    Where
    ( Zaman > '20010100000000' And Zaman < '20010200000000' ) And
    Od.Maas_ID = Uc.ID
    And
    Od.Pers_ID = P.ID

    falan gibi

    Hataya cok da acik oldugunu zannetmiyorum. Zaten oldukca basit. asil karisik hal senin dedigin gibi, her ay icin bi kolon acinca ortaya cikacak, bu sefer oyle bi select query yazmaya calisacaksin ki bi suresonra, :) ben yazamam mesela, cok usenirim...
     
  3. ee++

    ee++ Daimi Üye

    Kayıt:
    25 Temmuz 2002
    Mesajlar:
    1,122
    Beğenilen Mesajlar:
    0
    Şehir:
    Ankara
    Selamlar,

    Koyu renklilerin her birisi birer cizelge (tablo), alti cizililer ile anahtarlar. Referansları ve veri turlerini cikarabilirsiniz heralde:

    PERSONEL(PerNo, PerAdi, PerSoyAdi);
    AYLAR(AyNo, AyAdi);
    PERSONELMAAS(PerNo, AyNo, Yıl, MaasMiktari);

    Kolay gelsin.
     
  4. fatihhood

    fatihhood Aktif Üye

    Kayıt:
    22 Ekim 2002
    Mesajlar:
    415
    Beğenilen Mesajlar:
    0
    Meslek:
    Software Developer
    Şehir:
    Hamunaptra
    Alelacele bir cevap...

    Relation Tables!!!

    ;)