مشکل شناخت ارتباط جداول در Ecto

با درود خدمت شما . داشتم یک تست اجمالی می کردم دیدم که یک دفعه ی باگ وحشت ناک در برنامه ام پیدا کردم .

مشکل به این صورت هست

شما فکر کنید ما اطلاعات زیر رو داریم در schema های ( مجموعه - سرفصل ها - پست ها )

برای ساخت مجموعه

id: 1 , title: "category-one"
id:2 , title: "category-two"

برای ساخت سرفصل ها :

id: 1 , title: "headlines-one" which was related with category id 1
id:2 , title: "headlines-two" which was related with category id 1

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

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

post_id: 1 , title: "post-one", rel.category id 1 and rel.headlines id 1

تا اینجا مشکلی نیست حالا فکر کنید من به صورت زیر بیام و به دیتابیس بفرستم

post_id: 1 , title: "post-one", rel.category id 2 and rel.headlines id 1

با اینکه مجموعه دوم با سرفصل اول رلیشن نشده ولی پست داره ارسال می شه و این باگ برنامه من هست .

من به سختی تونستم این مورد رو در لینک زیر توضیح بدم :

ولی جوابی کامل دریافت نکردم. طرف فهم گفت من دارم به صورت زائد مجموعه رو هم در پست رلیشن می کنم در صورتی که نایاز نیست !!!

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

به نظرتون چطور می تونم موقعی که می خوام یک مقاله یا پست ایجاد کنم چک کنم که آیا کتگوری آیدی و هدلاین آیدی من با هم ارتباط دارند یا نه ؟ اگر بله ذخیره بشه اگر نه نشه ؟

با تشکر

1 پسندیده

اگه با کد مثال بزنی فکر کنم بهتر بتونیم کمک کنیم الان من منظور از قصد شما رو متوجه نمیشم به احتمال قوی ایراد از طراحی database شماست

2 پسندیده

شهریارجان به نظر من نیاز نداری پست رو به کتگوری هم متصل کنی. .اینجوری این خطا رخ نمیده . …

اما اگه بعنوان یه index روی کتگوری حساب کردی… این باگ نیست … و همینطور تو مرحله نمایش به کاربر … (بصورت یه دراپ داون اگه در نظر بگیریم . وقتی یه کتگوری رو میزنیم . ساب کتگوریای مخصوصش لود میشن) . کمتر پیش میاد که یکی از این حرکتا بزنه .

2 پسندیده

به نظرم اگه یک آموزش sql و database design بگیری کار با ecto برات به مراتب آسون تر میشه

2 پسندیده

من یک ویدیو درست کردم امید وارم کامل منظور من رو متوجه بشید و دلیل من رو از چرا اینکارو کردم هم درک کنید. احتمال می دم دارم جایی رو از نظر معماری دچار مشکل می شم. یکی از راه هایی کگه می تونست بهم کمک کنه استفاده از پریلود هست ولی خیلی در تبدیل اون بم json مشکل دارم به همین منظور لطفا ویدیو زیر رو ببنید

1 پسندیده

دارم میبینم ویدئو یک مشکل که همین اول میبینم اینکه که category هم به headline وصله هم پست یک راه برای رسیدن به جدول ها باشه

1 پسندیده

بنظر نمیاد مشکل از ecto باشه، اگر سکیما (منظورم هر چیزی هست که دیتا بیس رو تعریف کنه) رو شر کنی بهتره

1 پسندیده

بنظر منطقی میاد

2 پسندیده

در آخر ویدیو سام عزیز توضیح دادم چرا این کارو کردم . برای دریافت تمام اطلاعات و فرار از preload

به نظرتون کار من اشتباه است ؟

اینجا هم بهم یک پیشنهاد داده که بازم استفاده از پریلوده

درود توماج جان

design اشتباه من بودم ارتباط بینه headline و category از بین میبردم
پست فقط به هردو ارتباط باید داشته باشه

اینجا circular dependency وجود داره

3 پسندیده

سلام، امکان داره یکم واضح تر بگی؟ چون منم دارم بررسی میکنم :thinking:

1 پسندیده

توماج عزیز منظور منم ؟

2 پسندیده

بهله،

1 پسندیده

سام عزیز حالا باید چطورحلش کرد ؟ در اولین نگاه به فکرم اومد من یک changeset سفارشی درست کنم که آیدی کتگوری با سرفصل رو بگیره و ببینه با هم رلیشن هستند یا خیر اگر بله که هیچی اگر خیر اونجا ارور بده . به همین منظور گفتم آیا تابعی برای این کار وجود داره یا خیر؟

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

از نظره design باید تو database یک راه برای relation وجود داشته باشه اینجا headline به category وصله
پست به category تا اینجا خوبه اگه کسی بخواد از پست headline بگیره میتونه ولی مشکل وقتی پیش میاد که post به علاوه این ها مستقیم به headline هم وصله یعنی دو راه برای این ارتباط وجود داره

2 پسندیده

ارتباط بینه headline و category از بین میبردم
پست فقط به هردو ارتباط باید داشته باشه

1 پسندیده

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

اگر من ارتباط بین کتگوری و هدل لاین رو از بین ببرم آیا می تونه جلوی کاربر رو بگیره که مجموعه یا سرفصل اشتباه رو نده ؟ مشکل اینکه اشتباه ممکنه بده یا بخواد سیستم رو اذیت کنه

باتری من داره تموم میشه، اما خیلی ریلیشن ها زیاده، در ضمن میتونی یک سری constraint در سکیما ایجاد کنی روی ایندکس ها. وقتی شارژ کردم ادامه میدم اگر حل نشده بود.
در ضمن بنظر میاد جای یک جوینت اینجا خالیه، هنوز دارم ویدیو رو میبینم

1 پسندیده

من هنوز متوجه نشدم چرا میخای به کتگوری هم وصل باشه … درحالی که با اگه صرفا به هدلاین وصل باشه …و بخای با کتگوری بکشی بیرون … براحتی با join کردن این ۳تا جدول به همدیگه … میتونی با کتگوری هم بکشی بیرون … و جلوی این خطا گرفته میشه …

تو همین حالت خودت هم . مشکلی تهدید نمیکنه … اگه موقع واکشی با کتگوری + هدلاین مخصوصش ک تو منوت لود کردی بکشی بیرون … در واقع یوزر فقط باعث میشه پست خودش گم بشه …

2 پسندیده