چطور باید مطلب سایت رو به صورت شاخه بندی شدی دسته بندی کنیم مثلا دسته بازی خودش زیر دسته بازیهای اکشن , فکری و... چطوری این دسته بندی شاخه تو در تو باید ساخه بشه؟
سلام ...
داخل جدول category که درست کرده اید و دسته بندیهای مختلف رو اونجا نوشتید باید یک فیلد اضافه کنید به نام مثلا parent_id و داخل اون آی دی اون دسته بندی رو قرار میدید .. یعنی جدول category با خودش رابطه داره که اصطلاحا بهش میگن self-referential ... برای اینکه موضوع رو بهتر متوجه بشید ویدیو زیر میتونه کمکتون کنه ...
به این صورت میشه که یک ستون به دیتابیسمون اضافه میکنیم و میگیم که اون ستون یک آیدی میگیره که اون آیدی ایدی ستونی میشه که زیرشاخش میشه . اما اینجا یک مشکلی هست و اونم افزونگی هست مثلا وقتی دیتاها زیاد بشه تو این دیتابیس خونههای خاله کی صفر هستن هم زیاد میشه یعنی زیر شاخه ای ندارن آیا این افزونگی حساب میشه یا خیر؟
MohammadMoghadasi۳۰ تیر ۱۳۹۸، ۰۸:۵۸
نه این مورد افزونگی دیتا به حساب نمیاد ... افزونگی دیتا زمانی پیش میاد که شما یک دیتا رو در ۲ یا چند جای بیشتر ذخیره کنید ...
به عنوان مثال شما در جدول یوزر یک فیلد ایجاد میکنید به نام post_count و تعداد پستهای یوزر رو در اون قرار میدید ... بعد از یه مدت وقتی سیستم شما بزرگ میشه مثلا یه جدول ایجاد میکنید به نام user_stats که کلا میخواید تعداد پست ها، جوابها و مقالهها و هرمورد خاص دیگه ای از یوزر رو داخل اون قرار بدید ... در این حالت قطعا شما برای اینکه سیستمتون و طراحیتون به مشکل برنخوره باید post_count رو ببرید داخل user_stats و خب این قطعا یه جاهایی از کد قدیم شما رو درگیر میکنه و شما مجبور میشید که برید یه سری از کدهای قدیمیتون رو ریفکتور کنید و اینکه post_count رو از داخل users پاک کنید ... خیلی موارد وجود داره که به خاطر نبود وقت و یا مسائل به خصوص دیگه این کار انجام نمیشه و اون فیلد post_count به user_stats اضافه میشه ولی از داخل users پاک نمیشه ... همون کدهای قدیمی میمونه سرجاش و فقط شما بهش یک خط اضافه میکنید که مثلا زمانی که قرار بود post_count در جدول users رو افزایش بدی، post_count داخل جدول user_stats رو هم افزایش بده ...
توی این حالت شما افزونگی دیتا (Data redundancy ) دارید ... که یه جاهایی برای خوندن تعداد پست یوزر میرید از جدول یوزر میخونید و یه سری جاها میرید از user_stats و دیگه مشکلاتی که توی این حالت پیش میاد رو خودتون میتونید متصور بشید!!!
موفق باشید.
مهرداد سامی۳۱ تیر ۱۳۹۸، ۲۱:۳۵
سلام
این موضوع رو بسیار ساده میتونید مدیریت کنید به اینصورت که شما نیاز دارید دو تا جدول داشته باشید.
جدول مطالب و دسته بندی ها توی جدول مطالب یک فیلد رو برای ارتباط با دسته بندیها درنظر بگیرید. توی خود جدول دسته بندیها یک فیلد رو به عنوان parrent در نظر بگیرید که قابلیت nullable رو روش فعال کنید.
وقتی دسته بندی ایجاد میکنید این نکته رو در نظر بگیرید که اگر دسته ای دارید برای مثال به نام سخت افزار خود این دسته فیلد parent ش باید null باشه و اگر این دسته زیر مجموعه ای به نام برای مثال مادربرد دارد فیلد parent ش باید ای دی مربوط به دسته سخت افزار رو قرار بدیم. حالا وقتی میخوای توی صفحه اصلی سایت منوها رو نشون بدی بالا فقط دسته هایی را که فیلد parent ش null هست رو بخوون و زیر منوها اونهایی رو قرار بده که فیلد parent ش برابر با فیلد ای دی منوی بالایی باشد.