الیاس سخاوتی نیا
4 سال پیش توسط الیاس سخاوتی نیا مطرح شد
6 پاسخ

پیاده سازی دیتابیس برای مجموعه گیری اعضا

@hesammousavi @ali.bayat @Alimotreb @milad @davoodkhany @juza66 @rezajashnsaz0011 @mehdisut @mhmdkavosi @mirzaee.sh12 @proamirm
سلام دوستان
خسته نباشید.
ببینید فرض کنید من یه اکانت دارم که میتونم شماره 10 نفر رو به عنوان زیر مجموعه خودم وارد کنم و حالا این 10 نفر خودشون میتونن باز 10 نفر دیگه رو دعوت کنن و به همین ترتیب تا لایه سوم
حالا هر کس با شماره ای که معرفش توی سیستم ثبت کرده و کد معرفش وارد میشه و ثبت نام میکنه
یعنی میشه لابه اول 10 نفر، لایه دوم 100 و لایه سوم 1000 نفر
چطوری میتونم دیتابیس این سیستم رو پیاده کنم و این افراد رو شناسایی کنم؟
ممنون میشم راهنمایی کنید
تشکر


ثبت پرسش جدید
علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
4

چند راه برای این کار هست...

  • میتونی ۳ تا جدول درست کنی. و رابطه ها رو بینشون بوجود بیاری. جدول اول هیچی اما برای ۲ تای دیگه یه فیلد مثلا parent_id تعریف کنی تا بعدا بتونی اطلاعات رو واکشی کنی.
    به یه فیلد referrer_id یا همچین چیزی هم نیاز دارید تا بتونید شخص معرف رو شناسایی کنید.

  • اگر از لاراول استفاده میکنی از پکیج Laravel Categorizable هم میتونی استفاده کنی.
    https://roocket.ir/discuss/6117

این پکیج مال کار دیگریست اما خوب با کمی تغییر میشه در این سناریو هم ازش استفاده کرد.
به این شکل که ۳ تا دسته بندی تو در تو برای ۳ لایه‌ای که می‌خواهی درست میکنی. مثلا :

Layer1 > Layer2 > Layer3

بعد وقتی که کاربر میخواهد ثبت نام کنه.. لایه مربوط بهش رو در میاری و بعد از ثبت نام اون کاربر رو به دسته بندی مورد نظر attach میکنی. با استفاده از معرفش یه شناسه referrer_id هست که میتونید به جدول users اضافه کنید و بعدا باهاش عملیات شناسایی رو انجام بدید و یا از یه سری متدهایی که تو پکیج موجود هست استفاده کنی..

به این ترتیب مزایای زیر رو هم میتونی داشته باشی:

  • کاربرا در ۳ دسته بندی (یا هر مقدار دلخواه) جا میشند
  • نیازی نیست ۳ تا جدول جدا برای یوزر ها درست کنی
  • هر کاربر مشخصه که در چه لایه ای هست (با توجه به دسته بندیش)
  • با referrer_id هم مشخصه که معرف این کاربر کی بوده (و متعلق به چه دسته بندی هست)
  • برای روابط بین والد و فرزند متدهای خاصی وجود داره
  • برای چک کردن ارتباط با دسته بندی هم همین طور
    $user->hasCategory($Layer3);

الیاس سخاوتی نیا
تخصص : علاقه‌مند به برنامه‌‎نویسی
@elyassir 4 سال پیش مطرح شد
0

@ali.bayat
ممنون از پاسختون ولی من برای api نویسی (برای موبایل) از php خام استفاده میکنم!
واسه سه تا جدول متوجه نشدم دقیقا چجوری میشه
جدول اول (users) یا همون جدول اصلی که اطلاعات کاربرا هست
یه جدول دیگه لیست کاربرایی هست که شماره و referrer_id توشون ثبت شده تا اگه با همین شماره کسی ثبت نام کرد به جدول اول اضافه بشه و parent_id هم مشخص بشه
درست گفتم تا اینجا؟
همچین کاری میشه کرد؟ به مشکل نمیخوره؟!
منظور شما از جدول سوم چیه؟
تشکر


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

یه مدل ساختار در دیتابیس به این شکله که شما این ۳ دسته رو در ۳ جدول جدا ذخیره کنی. به این ترتیب میتونی بین لایه ها روابط خاص هم داشته باشی. ولی مشکلی که پیش میاد حین احراز هویته .. باید کوئری رو به گونه ای بنویسی که دنبال کاربر توی یکی از اون ۳ جدول بگرده..

یه مدل دیگه این که ۱ جدول users داریم. و یه جدول layer بعد parent_id رو میتونی در layer بگذاری و referrer رو در users.. بعد کاربر جدید که ثبت نام میکنه » لایه رو مشخص میکنی » یه layer_id اضافه میکنی.

یه حتی میشه از یه pivot Table هم استفاده کرد

همچنین ساختارهای دیگه هم هستند..

انتخاب گزینه درست در مورد پروژه مستلزم بررسی ساختار پروژه و چگونگی پیاده سازی API هست.


الیاس سخاوتی نیا
تخصص : علاقه‌مند به برنامه‌‎نویسی
@elyassir 4 سال پیش آپدیت شد
0

@ali.bayat
ممنون
ببخشید برای جدول layer که گفتین میشه بگین چند تا فیلد باید داشته باشیم و اینکه لایه رو چجوری باید مشخص کنیم؟
تا لایه اول که اوکیه، از کجا بفهمیم مثلا کاربر موردنظرمون چند تا زیر مجموعه تو لایه های اول تا سوم داره؟
مثلا کاربر x کاربر y رو دعوت میکنه و کاربر y توی لایه اول کاربر x هست.
حالا کاربر y خودش کاربر z رو دعوت میکنه و کاربر z علاوه بر اینکه توی لایه اول کاربر y هست، توی لایه دوم کاربر x هم هست.
اینشو نمیتونم درک کنم چجوری باید مشخص کنم
تشکر 🌹


الیاس سخاوتی نیا
تخصص : علاقه‌مند به برنامه‌‎نویسی
@elyassir 4 سال پیش مطرح شد
0

دوستان دیگه نظری نداشتن؟!


sh.mirzaee
تخصص : برنامه نویس ارشد
@mirzaee.sh12 4 سال پیش مطرح شد
1

با عرض پوزش بابت تاخیر در مشاهده.
یک جدول بسازید با ستون های مربوط به اطلاعات هر فرد + یک ستون به نام parentID که به آي دی پرنت اون فرد اشاره داره.
اونایی هم که سرشاخه هستن و پرنت ندارن این فیلد براشون با مقدار ۰ پرمیشه.
ساده ترین حالت ممکن این هست.
اگر ممکنه بعدا نیاز داشته باشید گزارش ها رو بر اساس لایه ی افراد بگیرید میتونید یک ستون مثلا به نام layerNo بذارید که عدد لایه ی طرف در اون درج شه. اینجوری میتونید هر نوع گزارشی رو نهایتا با زدن یک جوین از تیبل روی خودش, بگیرید.

امیدوارم واضح بوده باشه.


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

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