Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?

Merhabalar;

Elimde Mysql için tasarlanmış bir veritabanı mevcut. Bunu noSql bir çözüm olan mongodb'ye migrate etmek istiyorum. Daha önceden nosql ile tasarım yapmadım. Şu şekilde yaparsam sağlıklı bir çözüm olur mu danışmak istiyorum. Burada özellikle "food" tablosundaki kısımlar önemli bir hal alıyor. Açıkça yazmak matıklısı.

Soru : Yorumlar tablosunu ayrı bir collection da tutmak istiyorum. Çok fazla yorum ve beğeni olabilir. Fakat burada özelllikle yemek adımlarını ve malzeme listesini foods collectionında kalması bana mantıklı geliyor. Zira bunlar 10-15 adımda bitiyor. Ne şekilde olabilir. Yardımlarınızı bekliyorum. Saygılar. Özellikle foods collectionının şişmesi gibi bir durum olabilir mi. ?

{
   "_id":"ObjectID",
   "food_name":"İzmir Köfte",
   "food_time":"40 dk",
   "person_numb":"4 Kişilik",
   "user_id":"ObjectID",
   "tarifKategori":[
      "Ana Yemekler",
      "Sulu Yemekler"
   ],
   "food_image":"https://.......................",
   "comment":[
      {
         "comment_id":"ObjectID",
         "comment_id":"ObjectID",
         "comment_id":"ObjectID"
      }
   ],
   "tarif_malzemeler":[
      {
         "tarif_id":"ObjectID",
         "tarif_id":"ObjectID",
         "tarif_id":"ObjectID"
      }
   ],
   "tarifBegeni":[
      {
         "begeni_id":"ObjectID",
         "begeni_id":"ObjectID",
         "begeni_id":"ObjectID"
      }
   ]
}

https://drive.google.com/file/d/1uaTmvmbnpduAb6e2s3pmZFY7BdkHMn77/view?usp=sharing

    UurKorkmaz Yorumları ve beğenileri ayrı koleksiyonda tutun. 10-15 adımda biten koleksiyonları nested tutabilirsiniz.

    Ne kadar nested collection o kadar çok kompleks sorgu/bellek kullanımı demektir, buna dikkat edin. Şişme ile ne kastettiğinizi anlamadım.

    Şişme derken hocam, foods collectionınında aşırı veri yığını olmasını kastettim. Uzun uzadıya yazmak istiyorum.

    https://drive.google.com/file/d/1uaTmvmbnpduAb6e2s3pmZFY7BdkHMn77/view?usp=sharing

    1. users tablosu için users adında bir collection ve içinde user_detail tablosunu içeren bir object tanımladım.
      `{
      _id
      name
      lastname
      email,
      password ,
      fcm_token,
      email_verify,
      active,
      user_Detail:[
      {
      title,
      city,
      gender,
      about,
      website,
      instagram,
      notification
      }
      ],
    2. foods tablosunuda yeni sizinde belirttiğiniz gibi o lu şekilde düzenledim. Comment ve like lar için sadece objectID ile dışarda oluşturulan collectionlara erişim sağladık. Reimler birden fazla olursa yine foods içinde tutmak mantıklı sanki hocam. En fazla 4-5 adete kadar gidebilir. Tarif_adimlar ve tarif_malzemeleri tanımlarken başlarına index ekledim. Bu şekilde daha sağlıklı olur mu. ? Normalde [Adım1, Adım 2, Adım 3] şeklinde tanımlama seçeneğide mevcut.
      {
      _id
      food_name
      food_time ,
      person_numb ,
      user_id ,
      tarifKategori :[
      "Ana Yemekler",
      "Sulu Yemekler"
      ],
      food_image,
      comment:[
      {
      comment_id : ObjectID ,
      comment_id : ObjectID ,
      comment_id : ObjectID
      }
      ],
      tarif_beğeni:[
      {
      like_id : ObjectID ,
      like_id : ObjectID ,
      like_id : ObjectID
      }
      ],
      "tarif_adimlar":[
      {
      "0":"Adım 1",
      "1":"Adım 2",
      "2":"Adım 3",
      }
      ],
      tarif_malzemeler :[
      {
      "0":"Malzeme 1",
      "1":"Malzeme 2",
      "2":"Malzeme 3",
      }
      ],
      }
    3. Bu şekilde bir oluşturdum sayın hocam. :

      UurKorkmaz comment ve like için ayrı collection oluşturun ve food id'lerini içeride tutun:

      comments

      [
          {
              "_id": 1,
              "comment":null,
              "food_id": 1
          },
           {
               "_id": 2,
              "comment":null,
              "food_id": 1
          }
      ]

      likes

      [
          {
              "food_id": 1,
              "ip": "84.127.67.132",
              "liked_at": ISODate("2021-07-18T11:41:00.000Z")
          },
           {
              "food_id": 5,
              "ip": "74.96.127.102",
              "liked_at": ISODate("2021-07-18T11:55:10.000Z")
          }
      ]