[]
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!:)
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.
İ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.
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.
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
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