با سلام و احترام
دوستان من با php خام کد نویسی می کنم.
من میخوام چند تا انبار تعریف کنم که محصولات داخل هر انبار قرار بگیره.
و دو چیز رو بتونیم ببینیم:
هر انبار چه محصولاتی داره
و هر محصول توی چه انباری هست.
من خودم به این نتیجه رسیدم : 👇
توی دیتابیس باید یک جدول برای انبار و یکی برای کالا درست کنم و به یک جدول واسط هم نیاز دارم که توش ذخیره کنم چه کالایی در چه انباری موجود هست.
حالا چطور می تونم relation رو پیاده سازی کنم؟
ممنون میشم راهنمایی بفرمایید.
@mohaligateway
@hesammousavi
@ali.bayat
@mhyeganeh
@juza66
ببین گفته ی شما خیلی ابهام توش هست
برای هر چیزی هزاران روش هست
مهم اینه که دقیقا مشخص بشه چی میخوایی
اگر چند تا انباره و چند تا محصول
هر محصول توی یک انبار خاص
و هر انبار دارای چندین محصول ارتباط یک به چند هست و نیاز به جدول رابط نیست
اگر هر محصول توی چند انبار هست ( که یکم بی معنیه ولی خب) و هر انبار چندین محصول داره ارتباط چند به چنده
سه تا جدول داری
انبار
محصولات
ارتباط(مشخص کننده ی محصول و انبار)
در جدول رابط فقط میگی چه ایدی محصولی در چه انباری هست
اگر این محصول داخل دو تا انباره دو سطر نوشته میشه براش
مثلا محصول با ایدی ۱ هم در انبار با ایدی ۲ هست , و هم در انباری با ایدی ۱
(پیشنهاد میشه به جای محصول دسته بندی هارو مشخص کنی که توی چه انباریه و برای محصولات دسته بندی مشخص کنی )
بگذریم
من یک نمونه بهت نشون میدم خودت نیازتو از روش بردار
سه تا جدول ساختم و توشون داده هایی رو قرار دادم و یک کوئری ساده زدم که همه ی انبار هارو با محصولات داخلش و قیمت محصول مثلا نشون میده بهت
کدی هم که زدم قرار دادم برات
SELECT stores.name,
products.name,
products.price
FROM store_product
INNER JOIN stores
ON stores.id=store_product.store_id
INNER JOIN products
on products.id=store_product.product_id
اکثر این ابزارها کار با لایه داده ها رو به مفهومی به نام Model واگذار میکنند
به این ترتیب که هر کلاس Model میتونه نماینده یه Table در دیتابیس باشه
و میتونه بین این مدل ها رابطه هم وجود داشته باشه.
در کنارش معمولا یه سری Schema Builder هم موجوده که میشه باهاش ساختار دیتابیس رو نسخه بندی کرد
دقیقا سیستمی که در اکثر فریم ورک های PHP داریم
لینک های مستندات رو براتون گذاشتم
خیلی ممنون از پاسخگویی تون.
یعنی با inner jon ها نمیشه پیاده سازی کرد؟
آخه پروژه اونقدر بزرگ نیست.
@ali.bayat
چرا . جوین ها دقیقا چاره کار هستند
حتی خود لاراول هم برای اکثر روابطش از جوین ها استفاده میکنه.
با ORM سورس کدت نظم بهتری داره، و اگر پروژه هم بزرگ نیست پس نیازی به نگرانی هم نیست که ORM روی پرفرمنس اثر بگذاره. از طرفی با الکوئنت میتونی کوئری های خامت رو هم به راحتی اجرا کنی (در کنار امکاناتی کامل برای کار با دیتابیس)
دیگه انتخابش با خودت
خب من اگه بخوام از Jon ها استفاده کنم ، به چه شکل باید بنویسیم به عبارتی رابطه ای که برای محصولات و انبار وجود داره، یک رابطه چند به چند هست ؟ و اگه هست کدش به چه شکل خواهد بود؟
@ali.bayat
سلام مجدد
خیر، من پروژه که می خوام پياده کنم فقط این دو دیتابیس رو داره، خیلی سادس، فقط صرفا برای تمرینه.
@ali.bayat
سلام
بهترین راه استفاده از join های SQL هست این لینک رو یه نگاه بنداز انگلیسی هست ولی ساده توضیح داده کمکت میکنه بحث join های SQL رو راحت درک کنی با تصویر و کد توضیح داده که از join ها چطور استفاده کنی و نتیجه هرکدوم چی هست
https://blog.codinghorror.com/a-visual-explanation-of-sql-joins/
با این تقریبا دستت میاد که join ها روی 2 تا جدول چطور کار میکنند دیگه بعدش برای اینکه چندتا جدول رو با هم join کنی کارت راحت تره یه سرچ بزنی اتصال چندتا به هم رفرنس براش پیدا میکنی
@sajad.zangeneh20
سلام
بیشتر پروژه شما در دیتابیس قابل پیاده سازی هست
اگر پروژتون در همین حد هست و میخواید ساختار دیتابیس رو طراحی کنید ، کافیه به صورت زیر باشه :
سلام
به نظرم نیاز نیست اینقد پیچیدش کنی دیتابیس رو و به جدول رابط نیازی نیست
چون هر محصولت خواه نا خواه باید داخل یک انبار باشه پس به جدول محصولت یک فیلد انبار اضافه کن فقط
یک جدول هم برای اسامی انبار ها
شما در جدول واسط باید بیای به اضای هر محصول بگی توی این انبار هست که افزونگی داری چون نام انبار و نام محصول رو باید برای هر کدوم توی اون جدول قرار بدی
ولی با این کار فقط یک فیلد رو ذخیره میکنی و از ذخیره ی فیلد دیگه جلوگیری میشه
ولی اینو بگم که اگر برای محصولاتت دسته بندی مشخص کردی
مثلا کالای دیجیتال - سلامت - خودرو - ورزشی - کتاب
و دسته بندی داری براشون
میتونی جدول واسط رو بگی چه دسته بندی ای در چه انباری هست
اینطوری تعداد سطر هات ب تعداد دسته بندی هات میشه و خیلی کاهش پیدا میکنه
بستگی به پیاده سازی فعلی دیتابیستون هم داره
اگر دسته بندی نداری روش زیر خیلی راحت برای یک محصول انبارش رو مشخص میکنه
ولی این برای یک پروژه ی کوچیک مناسبه
چون توی حالت پیشرفته تر شما دسته بندی داری برای محصولاتت که اونم باید ببینیم توی جدول واسطی هست یا یه فیلد اضاف شده توی جدول محصولت ( بنا به رابطه ی یک به چند یا چند به چند بودنش )
stores
id - integer
name - string
products
id - integer
name - string
.
.
.
store_id - integer
@wozniak
سلام
من می خوام از رابطه چند به چند استفاده کنم.
این توضیحاتی که شما فرمودید میشه رابطه یک به چند؟
من اگه بخوام یک جدول واسط، یعنی هم جدول محصولات و هم جدول انبار و یک جدول واسط داشته باشم باید چه کاری انجام بدم؟
@salar.mohammad2013
ببین گفته ی شما خیلی ابهام توش هست
برای هر چیزی هزاران روش هست
مهم اینه که دقیقا مشخص بشه چی میخوایی
اگر چند تا انباره و چند تا محصول
هر محصول توی یک انبار خاص
و هر انبار دارای چندین محصول ارتباط یک به چند هست و نیاز به جدول رابط نیست
اگر هر محصول توی چند انبار هست ( که یکم بی معنیه ولی خب) و هر انبار چندین محصول داره ارتباط چند به چنده
سه تا جدول داری
انبار
محصولات
ارتباط(مشخص کننده ی محصول و انبار)
در جدول رابط فقط میگی چه ایدی محصولی در چه انباری هست
اگر این محصول داخل دو تا انباره دو سطر نوشته میشه براش
مثلا محصول با ایدی ۱ هم در انبار با ایدی ۲ هست , و هم در انباری با ایدی ۱
(پیشنهاد میشه به جای محصول دسته بندی هارو مشخص کنی که توی چه انباریه و برای محصولات دسته بندی مشخص کنی )
بگذریم
من یک نمونه بهت نشون میدم خودت نیازتو از روش بردار
سه تا جدول ساختم و توشون داده هایی رو قرار دادم و یک کوئری ساده زدم که همه ی انبار هارو با محصولات داخلش و قیمت محصول مثلا نشون میده بهت
کدی هم که زدم قرار دادم برات
SELECT stores.name,
products.name,
products.price
FROM store_product
INNER JOIN stores
ON stores.id=store_product.store_id
INNER JOIN products
on products.id=store_product.product_id
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟