جواد
12 ماه پیش توسط جواد مطرح شد
5 پاسخ

طراحی دیتابیس mongoDB برای سایت فروشگاهی

سلام دوستان خسته نباشید.
من می خوام برای یک سایت فروشگاهی که بکش با node هست از مانگو دی بی استفاده کنم.اما اصلا نمی دونم باید چطوری اسکیما هارو بنویسم و دیتابیس رو طراحی کنم.
مثلا کامنت های کاربر باید یک کالکشن جدا باشه و با فیلدی به نام id که منظور id کاربر هست به کاربر متصل بشه و از طریق این فیلد کامنت های هر کاربر دریافت بشه و یا کامنت ها خودشون یک فیلد در اسکیما کاربر باشه.چون اگر کالکشن جدا باشه اونوقت عملیات دریافتشون برای ادمین راحت تره و با یه دستور می تونه همه ی کامنت ها رو دریافت کنه اما اگر جزئی از اسکیما کاربر باشه ، ادمین برای این که کامنت ها رو در پنل خودش دریافت کنه باید طی اون دستور get تک تک کاربرا بررسی بشن کامنت ها شون در صورت وجود سرهم بشن و بعد نمایش داده بشوند. خوب این کار بیشتری می بره و سرعت کمتر و بار سرور بیشتر میشه.من خیلی بک اند کار نیستم اما فکر می کنم درست می گم.
اصلا قاعده و قانون طراحی دیتابیس چیه؟
ممنون می شم اگر منبعی برای توضیحات این مدلی بلد هستید لینکشو برام قرار بدید.


ثبت پرسش جدید
oss_vahid
تخصص : wordpress developer
@ossvahid 12 ماه پیش مطرح شد
1

با mysqli که من انجام میدم میام ی جدول می‌سازم مثلا User comments بعد این جدول با جدول هایی که به user مرتبط هستش Join میشه طبق چی طبق آیدی کاربر
مثلا تو جدول user comments ی ستون داریم بنام uid یا همون userid بعد آیدی این کاربر با ایدی کاربر که تو جدول user هستش چک میشه جوین میشه و داده ها دریافت میشه در واقع با یک کویری میشه به چندین جدول و کلی دیتا دسترسی پیدا کرد


جواد
@sherlockkh221 12 ماه پیش آپدیت شد
0

من sql بلد نیستم. فکر می کنم فرق می کنه با nosql.
این طوری که شما می گید کامنت ها می شن یه کالکشن جدا و فیلدی به نام userid وجود داره که مشخص می کنه این کامنت برای کدوم کاربره.این روش کار می کنه اما تو noqsl چون رابطه ای بین کالکشن ها نیست کار شاید زمان بر بشه. مثلا اگر 1000 کامنت یه سایت داشته باشه و فقط یکیش برای یک کاربر خاص باشه باید با هر بار درخواست همه ی 1000 تا بررسی بشوند. این کار از نظر شما درسته ؟ مشکلی نداره؟


میکائیل
تخصص : برنامه نویسی سمت سرور و کلاینت
@FullStack 12 ماه پیش آپدیت شد
1

سلام وقت بخیر
دوست عزیز میتونی یه کالکشن بزنی به اسم comments و توی اون فیلد user بدی بعد اونو ربط بدی به یه ایدی از کالکشن یوزر که زمانی که یوزر کامنت رو میزنه توی اون فیلد ایدیش ذخیره بشه و ایدی محصول که از محصولات گرفته میشه توش ذخیره بشه اینجوری هم میتونی کامنتای محصول رو لود کنی هم میتونی کامنتی که مربوط به کاربر هست رو بگیری کدش ایجاد اسکیما هم این میشه واسه ریلیت کردنشون

const commentsSchema = Schema({
    message: {
        type: String,
        required: 'message is Required!'
    },
    product: {
        type: mongoose.Schema.Types.ObjectId,
        required: "Product is Required!",
        ref: "Product"
    },
    user: {
        type: mongoose.Schema.Types.ObjectId,
        required: "User is Required!",
        ref: "User"
    }
},{
    timestamps: true
});

این یه نمونه هست که message کاربر رو به صورت متن میگیره و ایدی پروداکت رو باید بهش بدی موقعه زدن کامنت و ایدی کاربر که مشخصه که تایپش ابجت ایدی هست که تایپ ایدی های داخل mongodb هست توی mysql از عدد شروع میکنه میره بالا اما mongodb ساختار ایدیش پیچیده تر هست و برای سیو کردنش باید تایپش رو objectid و با یک رفنرس و منبع از یه کالکشن دیگه درنظر بگیری بعدش دیگه خیلی راحت میشه لود کردنشون مثلا میگی همه کامنت هایی که product برابره با این ایدی product بیان و لود بشن یا کامنتای کاربر خاصی که برای یک پروداکت خاص هس رو لود بکنه یا کلا کامنتای این کاربر رو لود بکنی خیلی ساده میشه


جواد
@sherlockkh221 12 ماه پیش مطرح شد
0

الان در این کد تایپ رو objectid مشخص کردید .
پس ref رو برای چی قرار دادید.
id از سمت فرانت میاد و از اونجایی که کاربر بهش دسترسی نداره قطعا ایدی درستی باید باشه پس کار ref چیه؟


میکائیل
تخصص : برنامه نویسی سمت سرور و کلاینت
@FullStack 12 ماه پیش مطرح شد
0

خوب تایپ مشخص میکنه چی قراره توش جا بشه عدد رشته یا هرچی تایپ objectid مخصوص mongodb هست چون ایدی های کاکشن ها متاوفت هست تایپشون باید تایپ objectid رو باید بدی بعد ref میگه این ایدی رو قراره از کدوم کاکلشن بگیرم مخفف رفرنس هست


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام