[]

database mimarisi

merhaba, bir yemek tarifleri web sitesi yapmak istiyorum. sitenin databse'i için bir şema çıkardım. konunun uzmanı değilim, yazılımcı değilim, hobim sadece. bu yapı doğru mu yanlış mı yol gösterecek biri var mı?

Sitenin amacı: kullanıcıların girip üye olabilecekleri, benim eklediğim yemek tariflerini görebilecekleri yorum ve puan bırakabilecekleri bir site.

ibb.co

yorumlar için şimdiden teşekkürler!:)

 
User spesific alanları neden profile diye bir tablo oluşturarak orada tutuyorsunuz? User'a dair ikincil düzeyde bilgiler için bir tablo oluşturulacaksa bunda sorun yok ancak email, telefon gibi bilgiler user tablosunda tutulmalı bence

İngredients tablosunda gıda malzemelerini tutabilirsiniz, böylelikle bu tabloda tek bir domates kaydını kullanarak bir çok recipe de domatesi kullanabilirsiniz.

Bir recipe'ye select attığında malzemelerin de bu sorgu ile gelmesini beklerim. Recipe'ye birden fazla ingredient kolonu ekleyerek (ingredient1, ingredient2, ingredient3.... Bu best practise değil ama istediğiniz kadar nullable kolon oluşturmakta özgürsünüz.) ingredient tablosundaki entity'nin id'sini burada foreign key olarak gösterebilirsiniz.
  • war of the world  (30.10.24 21:28:45) 
RecipeIngredients adında bir junction table ile tarif-malzeme ilişkisini tutmak daha sağlıklı. Ekstra 20 tane kolon eklemeye lüzum yok


  • war of the world  (30.10.24 21:51:11) 
eğer bunu online bir şeyde yaparsan yardımcı olmak daha kolay olur, burası şöyle burası böyle olur diye.

ingredients bağımsız bir tablo olmalı,

recepie_ingredients diye bir tablo oluşturup tarifte kullanılacak malzemeleri bağlayabilirsiniz daha kolay olur.

instructions da order olmalı, düşün kü tarifte yağı tenccereye koyun soğanı kavurun kısmı en sona geliyor. çünkü unutulmuş, sonradan eklenmiş.

çoğu instructions aynı aslında onlarıda da ayırabilirsiniz,
(hemen hemen her yemekte, yağı koy, soğanı kavur, salçayı ekle gibi)

recepie_photos diye bir tablo olmalı (fotoğraflar, çoğul) ve receipe_videos da olmalı.

user varda bu user ne haklara sahip o belli değil,

perms diye bişi olmalı, birde user_perms, perms de admin, user, moderator vs. gibi şeyler olacak ki kimin neyi yapabileceğini belirleyebil.


bu dediklerim tamamen normalizasyona dönük tavsiyeler, aslında tek düz bir tablo ile de çözebilirsiniz işinizi, daha hızlı ve kolay olur zira o tarifleri yazarken bir şeylerden bir şeyler seçip, sıralamasını yapmak oturup komple yazmaktan zor.
  • selam  (30.10.24 21:54:58) 
chatgpt'ye isterleriniz söyleyin yapsın.
ayrıca sizin yapıda nosql dbde iş görür ve hızlı olur.

  • nuisance2  (30.10.24 23:42:14) 
1- Profil ve kullanıcı tabloları çakışıyor.
2- Bazı tablolarda veri tipleri yanlış atanmış. Örneğin, comments tablosundaki recipe_id alanı varchar, profile tablosundaki phone alanı ise int olarak tanımlanmış.
3- Gözüme çarpan en büyük eksiklik rol bazlı bir yönetim olmaması. Bir kullanıcı sisteme logn olduğunda, admin mi, editör mü yoksa standart bir kullanıcı mı olduğunu belirlemek için bir rol yönetim mekanizması eklemeniz gerekir.

İlk bakışta gözüme çarpanlar bunlar.

edit: yazım error
  • datnet  (31.10.24 00:14:29 ~ 00:15:03) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.