نگار
7 ماه پیش توسط نگار مطرح شد
4 پاسخ

طراحی دیتابیس سیستم ارتقا دوره

سلام دوستان
من یه جدول دیتابیس دارم که شامل اطلاعات دوره‌هاست به اینصورت:

    public function up()
    {
        Schema::create('courses', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->string('status');
            $table->string('type');
            $table->string('price');
            $table->timestamps();
        });
    }

این دوره‌ها هر کدوم دارای محتوای ویدئویی و همچنین میتونند آزمون و تکلیف و ... یکسری آپشن‌های دیگه داشته باشند. دوره‌هایی که فقط محتوا دارند رو افراد میتونند رایگان ثبتنام کنند. ولی ما الان میخوایم برای بعضی ازین دوره‌ها آزمون تعریف کنیم و به یه قیمتی به فروش برسونیم. الان من توی طراحی جداول دیتابیسش مشکل دارم که چطور فردی رو که قبلا توی دوره ثبتنام کرده رو با گرفتن یه هزینه‌ای دسترسی آزمون بدم. شبیه سایت مکتبخونه.

    public function up()
    {
        Schema::create('orders', function (Blueprint $table) {
            $table->id();
            $table->string('course_id');
            $table->string('user_id');
            $table->string('status');
            $table->string('price');
            $table->timestamps();
        });
    }

ثبت پرسش جدید
محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 7 ماه پیش مطرح شد
1

سلام دوست عزیز
موضوع خیلی ساده هست فقط نیازمند اینه که شما موضوع رو برای خودت خیلی واضح کنی
شما یک سری درس داری که اشخاص یا دسترسی بهش دارند یا ندارند کاری بهش نداریم
یک سری ازمون داری که لازمه ی اون دادن هزینه هست
خب خیلی راحت یک جدول رابط بین اشخاص و ازمون ها میزاری و رابطه چند به چند هم هست
یعنی یک شخص میتونه هزینه n آزمون رو داده باشه و یک ازمون میتونه توسط n شخص هزینش پرداخت شده باشه و در دسترسشون باشه

منطق این کار مثل سطح دسترسی و Role و Permission هست از نظر پیاده سازی دیتابیسی (اگر دوره پروژه محور لاراول راکت رو دیده باشید )
در کل شما بر اساس نیاز میتونی جدول درس شخص داشته باشی (course_user) و دیگ جدول قبلی و یا واسط دیگری نیازت نشه.
مثلا بگی شخص به درس دسترسی داره ؟ به ازمون مربوط به این درس چطور ؟ به تکلیفش چطور ؟
در صورتی که این کار رو بکنی با یک جدول همه ی این موارد راحت چک میشه
مثلا جدول زیر

        Schema::create('course_user', function (Blueprint $table) {
            $table->id();

            $table->unsignedBigInteger('user_id');
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

            $table->unsignedBigInteger('course_id');
            $table->foreign('course_id')->references('id')->on('cource')->onDelete('cascade');

            $table->boolean('has_access_to_exam')->default(false);
            $table->boolean('has_access_to_practice')->default(false);
            $table->boolean('has_access_to_x')->default(false);
            $table->boolean('has_access_to_y')->default(false);

            $table->timestamps();
        });

البته نیاز به id و timestamps هم نیست معمولا توی جدول واسط رابطه ای و کلید اصلی میشه ترکیب دو کلید خارجی

شما با جدول واسط مربوط به درس و شخص همه ی دسترسی ها رو هم بررسی و نگهداری میکنی
کلا بستگی به مکانیزم منطقی و پیاده سازی شما داره که چی بخواید و چیکار کنید وگرنه راه حل که زیاد داره باید ببینید کدوم بهتره براتون


نگار
تخصص : توسعه دهنده بک اند
@Negaram 7 ماه پیش مطرح شد
1

خیلی ممنون.🙏
من همش تو فکر یه جدول جدید برای آپشن‌های دوره بودم ولی انگار راه حل شما مناسبتره.
در موردش فکر میکنم اگر مشکلی داشتم مزاحمتون میشم.😁


مهدی نظری
تخصص : توسعه دهنده Front End
@mahdi.nazari 7 ماه پیش مطرح شد
1

سلام نگار🖐
امیدوارم حالت خوب و عالی باشی✨

دیتابیسی که شما طراحی کردی تا حدودی درسته ، اما چند تصحیح کوچک نیاز داره .

  1. جدول courses:

    • در جدول courses شما یک ستون به نام status دارید که به طور احتمالی برای نشان دادن وضعیت دوره مانند "فعال" یا "غیرفعال" استفاده می‌شود. اگر وضعیت‌های متفاوتی برای دوره‌ها دارید (مثلاً "فعال", "غیرفعال", "در حال برگزاری" و غیره)، می‌توانید از یک مقدار عددی استفاده کنید (مثلاً 1 برای فعال و 0 برای غیرفعال) و یک جدول جداگانه برای وضعیت‌ها ایجاد کنید.
  2. جدول course_user:

    • در جدول course_user شما ستون‌های has_access_to_exam, has_access_to_practice, has_access_to_x, و has_access_to_y داری این روش مناسب نیست زیاد چرا چون که اگع تعداد آپشن‌ها زیاد باشه، تعداد ستون‌ها زیاد میشه و قیمه میره تو ماستا . به جای این روش، میتونی از یک جدول جدید به نام course_options استفاده کنی.
  3. جدول course_options:

    • این جدول بهت امکان می‌ده تا آپشن‌های مختلفی را برای هر دوره تعریف کنی. میتونی ستون‌های زیر را در این جدول قرار دهید:
      • id (شناسه یکتا)
      • course_id (کلید خارجی به جدول courses برای ارتباط با دوره مربوطه)
      • option_name (نام آپشن، مثلاً "آزمون" یا "تکلیف")
      • price (قیمت مربوط به آپشن اگر قابل خرید است، در غیر این صورت 0 یا null)
    • با این روش، میتونی به راحتی برای هر دوره تعداد نامحدودی آپشن ایجاد کنی و قیمت هر آپشن را مدیریت کنی.

با این تغییرات، می‌توانید به راحتی کاربرانی که به دوره‌ها ثبت‌نام کرده‌اند را با گرفتن هزینه‌های مرتبط با آپشن‌هایی که انتخاب کردن ، مدیریت کنی و تمام 👌.

امیدوارم پاسخم بهت کمک کرده باشه ❤️
موفق و پیروز باشی 🤘🌹


نگار
تخصص : توسعه دهنده بک اند
@Negaram 7 ماه پیش آپدیت شد
0

ممنون.
با این طراحی باید از کجا بفهمم که کاربر به کدوم آپشن دسترسی داره و پولشو پرداخت کرده؟
@mahdi.nazari


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

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