PHP Test Projesi Algoritma

Blue Life

Kilopat
Katılım
24 Aralık 2014
Mesajlar
448
Daha fazla  
Cinsiyet
Erkek
Merhaba.

Bir test projem var.
Sınıflar, kategoriler ve üyeler var.
Bir üyenin birden fazla sınıfı ve kategorisi olabiliyor.

Burada fikrinizi almak istiyorum. Fikrinizi almak istediğim nokta şu.

Bir üyenin bir kategoriyi görebilmesi için o kategorinin hem üyenin kayıtlı olduğu sınıfa hem de üyenin kendisine tanımlanması gerekiyor.

Örneğin Üniversite adında bir sınıf ve Kpss adında bir kategori olsun.
Ahmet adlı kullanıcı Üniversite adlı sınıfa kayıtlı.
Ahmet'in Kpss kategorisini görebilmesi için bu kategorinin Hem Üniversite sınıfına tanımlanması hem de Ahmet'in kendisine tanımlanması gerekiyor.


Bu iki tarafa da tanımlama yapma noktası sanki yanlış bir algoritma kurulmuş gibi geliyor bana.
Bu işlem daha sağlıklı ve esnek olarak nasıl yapılabilir?
Siz olsanız nasıl yaparsınız?

Sistem Hiyerarşisi
  • Üyeler
  • Sınıflar
  • Kategoriler
    • Dersler
      • Konular
        • Testler
          • Sorular
 
Technopat'a üye olmadan dolaşabiliyorum. Ama yönetici forumunda mesaj yazabilmek için hem üye sınıfına hem de yönetici kategorisine dahil olmam gerek. Böyle bir durum gayet mantıklıysa o zaman sınıf ve kategori sisteminde mantıksal bir hata görmüyorum.

Ama projenin kendi dinamiklerinde önemli noktalar atlanmış gibi. Mesela tam olarak konuya hakim değilim ama bu bir online kurs sistemi olsaydı, "Sınıflar" adında ayrıca bir nesne üretmek yerine Sınıflar > Dersler > Konular mantığında gidebilirdim.
 
Technopat'a üye olmadan dolaşabiliyorum. Ama yönetici forumunda mesaj yazabilmek için hem üye sınıfına hem de yönetici kategorisine dahil olmam gerek. Böyle bir durum gayet mantıklıysa o zaman sınıf ve kategori sisteminde mantıksal bir hata görmüyorum.

Ama projenin kendi dinamiklerinde önemli noktalar atlanmış gibi. Mesela tam olarak konuya hakim değilim ama bu bir online kurs sistemi olsaydı, "Sınıflar" adında ayrıca bir nesne üretmek yerine Sınıflar > Dersler > Konular mantığında gidebilirdim.
Şu noktayı atlamışım.
Kategoriler aynı zamanda sınıflara atanıyor. Her sınıfın birden fazla kategorisi olabiliyor.

Yani sınıflar var.
Sınıflara kategorileriler atanıyor. Üyelerin sınıfa atanan kategorileri görebilmesi için kategorinin de üye'ye tanımlanması gerekiyor.

Kategoriler mantığını şu şekilde düşünmüştüm.

Mesela Üniversite adında sınıfımız olsun.
Sınıfta Kpss Kategorisi ve Dgs Kategorisi var.
Ahmet adlı üye Üniversite Sınıfına kayıtlı ama sadece Kpss kategorisine katılmak istiyor / ya da yönetim Ahmet adlı üyenin Üniversite sınıfında sadece Kpss kategorisini görebilsin istiyor.

Kategorilerin amacı aslında buydu.

Sizin bir öneriniz var mı?
 
"Kategori" ismi kafa karistirici.
Normalde Okul - Ders - Ogrenci uclusu ile halledilir bu.
Okulda dersler olur. ( one to many )
Ogrenciler derslere enroll eder ( many to many )
Derslerin term'leri olur, orn: 2016 sonbahar matematik 201 dersi ( one to many )

Bir ogrenci derse enroll edince zaten universiteye de dolayli olarak "bagli" olmus oluyor, neden ayrica ogrenciyi universite ile iliskilendirmek istiyorsun ders uzerinden?

Yani senin ornek uzerinden sorayim, kategoriye kayitli olup da, universiteye kayitli olmayan ogrenci uzerinden ilerleyecek bir senaryo olacak mi?

Olmayacaksa gereksiz yere karistirmis oluyorsun isi.

Soruyu algoritma diye sormussun ama bu aslinda DB dizayn problemi.
RDBMS sistemlerde bir bilgiyi tek bir defa kaydetmek istersin, duplike etmek yerine aralarindaki iliskiyi tutarsin. ( O yuzden adi relational )
 
Bence de burada gereksiz soyutlamalar hiyerarsiyi bozacaktir. Tasarim yaparken once her bir transitive dependency'yi bolup, farkli tablolar haline getirmeye calis. Daha sonra ayirdigin dependencyler arasindaki iliskileri kur. Daha sonradan eklemek istedigin soyutlamalar icin de yeni tablolar olusturup mevcut tablolarla arasindaki iliski turune gore (1-1, 1-many ya da many-many) referanslari ekleyip duruma gore junction tablelari olusturabilirsin. Kisacasi oncelikle her sinif/universite ortaminda mutlaka olmasi gereken mefhumlardan yola cikarak bir hiyerarsi kurup, sonra kendi soyutlamalarini mevcut tablolarla iliskilendirmek daha mantikli.

Database System Concepts - slides Bu linkte, en populer veritabani kitaplarindan birinin orneklerinde kullandigi komple bir universite sisteminin tablo DDL'leri mevcut. Ornek olmasi acisindan inceleyebilirsin.
 
"Kategori" ismi kafa karistirici.
Normalde Okul - Ders - Ogrenci uclusu ile halledilir bu.
Okulda dersler olur. ( one to many )
Ogrenciler derslere enroll eder ( many to many )
Derslerin term'leri olur, orn: 2016 sonbahar matematik 201 dersi ( one to many )

Bir ogrenci derse enroll edince zaten universiteye de dolayli olarak "bagli" olmus oluyor, neden ayrica ogrenciyi universite ile iliskilendirmek istiyorsun ders uzerinden?

Yani senin ornek uzerinden sorayim, kategoriye kayitli olup da, universiteye kayitli olmayan ogrenci uzerinden ilerleyecek bir senaryo olacak mi?

Olmayacaksa gereksiz yere karistirmis oluyorsun isi.

Soruyu algoritma diye sormussun ama bu aslinda DB dizayn problemi.
RDBMS sistemlerde bir bilgiyi tek bir defa kaydetmek istersin, duplike etmek yerine aralarindaki iliskiyi tutarsin. ( O yuzden adi relational )

Merhaba tekrar.
"Yani senin ornek uzerinden sorayim, kategoriye kayitli olup da, universiteye kayitli olmayan ogrenci uzerinden ilerleyecek bir senaryo olacak mi?" diye sormuşsunuz.

Hayır devam etmeyecek. Kategoriler sınıf altında gözükecek.
Amacım bu sistemi mümkün oldukça güncellenebilir ve esnek bir yapıyla geliştirmek.

Tablolarımı paylaşsam bir gözden geçirir misiniz? Ben yazılımcı değilim ve hobi olarak ilgileniyorum.

Bence de burada gereksiz soyutlamalar hiyerarsiyi bozacaktir. Tasarim yaparken once her bir transitive dependency'yi bolup, farkli tablolar haline getirmeye calis. Daha sonra ayirdigin dependencyler arasindaki iliskileri kur. Daha sonradan eklemek istedigin soyutlamalar icin de yeni tablolar olusturup mevcut tablolarla arasindaki iliski turune gore (1-1, 1-many ya da many-many) referanslari ekleyip duruma gore junction tablelari olusturabilirsin. Kisacasi oncelikle her sinif/universite ortaminda mutlaka olmasi gereken mefhumlardan yola cikarak bir hiyerarsi kurup, sonra kendi soyutlamalarini mevcut tablolarla iliskilendirmek daha mantikli.

Database System Concepts - slides Bu linkte, en populer veritabani kitaplarindan birinin orneklerinde kullandigi komple bir universite sisteminin tablo DDL'leri mevcut. Ornek olmasi acisindan inceleyebilirsin.

Teşekkür ederim.
 

Yeni konular

Geri
Yukarı