انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: علی قنواتیان در 16 بهمن 1388، 07:03 بظ
-
سلام، البته میدونم که این سوال بیشتر به پایگاه داده مربوطه تا برنامه نویسی ولی خب بخشی به اسم پایگاه داده پیدا نکردم!
سوال اینجاست:
یک پایگاه داده دارم که محصولات در آن تعریف شده با این فیلدها:
کد محصول/ اسم محصول/ کد دسته بندی و...
میخوام بدونم اگه بخوام حالت تگ بندی رو در این پایگاه بگذارم طراحی پایگاه دادهش چطور باشه بهینهتره؟ (اگه هنوز منظورم از تگ رو متوجه نشدین، به پایین همین سوال مراجعه کنین)
در این منبع http://ocw.kfupm.edu.sa/user%5CDAD-MIS-311%5CConceptual%5CUnit4/U4_T1B.htm (http://ocw.kfupm.edu.sa/user%5CDAD-MIS-311%5CConceptual%5CUnit4/U4_T1B.htm)
در بخش پیادهسازی دروس دانشگاهی در رابطهی «پیشنیاز بودن» اشاره شده که این یک رابطهی چند-به-چند است که به نظر من این در مورد تگها هم باید صادق باشه.
مسئله اینجاست که اگه جدولی برای تگها با عنوان «تگهای مرتبط» بسازم. استفاده از این سیاست بهتره که به ازای هر رکورد که ارتباط تگ x رو به y نشون میده یک رکورد y به x هم اضافه کنم
یا اینکه query رو جوری بنویسم که اگه مثلا رابطهای برای x در ستون اول پیدا نکرد، ستون دوم رو هم دنبال x بگرده؟
کدوم یکیشون زمان بیشتری از موتور پایگاه داده میگیره؟
من از mysql استفاده خواهم کرد.
--- تگ دیگه چه کوفتیه؟ -----
در مورد تگ منظورم اینه که برای هر محصول چند تگ وجود داشته باشه و کاربران بتونن با پرسوجوی تگ به محصولات مرتبط دسترسی پیدا کنند
به عنوان مثال:
برای محصولی مثل «کیف تارگوس مدل inspector 13» تگهای «لوازم جانبی لپتاپ»، «کیف لپ تاپ»، «لپ تاپ» و «تارگوس» را میشه در نظر گرفت.
و نیاز است که مثلا با پرس و جوی «تارگوس» کلیهی محصولاتی که در دسته بندی «تارگوس» وجود دارند، ظاهر شوند.
-
از دید ERD، شما باید یک جدول products داشته باشی و یک جدول tags که ارتباط این دو جدول چند به چند میشه یعنی:
هر محصولی میتونه هیچی یا چند تا tag داشته باشه و هر تگی مربوط به هیچی یا چند محصول میشه
همونطوری که میدونیم هر ارتباط چند به چند در ERD تبدیل به یک جدول در physical database میشه و کلیدهای اصلی دو جدول products و tags به عنوان کلید خارجی جدول products_tags منظور میشه.
این انجمن مخصوص اوبونتو است و نه پایگاه داده و خیلی خوب نیست مثل انجمنهای دیگه شلوغ بشه و هر موضوعی رو به انجمن اضافه کنیم. اگه یک سر به انجمنهای دیگه بزنی منظورم رو متوجه میشی از بخشهای اجتماعی تا سیاسی، فرهنگی، آشپزی، ادبی، گنو/لینوکس، ویندوز، ویروس، معرفی نرمافزار، برنامهنویسی، دیویبی و خیلی بخشهای دیگه رو دارند و در هیچ کدومشون هم حرفی برای گفتن ندارند. مثل یک اقیانوس به قطر ۱ میلیمتر میمونند ;)
در ضمن خیلی خوبه که در زمینهٔ پایگاهداده یک انجمن جدا داشته باشیم، فقط لازمه یک نفر شروع کنه!
-
درود دوست عزیز
در DB های Relational ما نمی تونیم رابطه چند به چند داشته باشیم ( اون طوری که در ERD دارید ) یعنی قابل پیاده سازی نیست
پس باید این دو جدول رو بشکونید و یک جدول واسط ایجاد کنید که وظیفه لینک کردن بین این دوتا جدول روداره
جدول تگ ها n------------------ n جدول محصولات
به این صورت میشه
جدول تگ ها ۱ ------------n جدول واسط
جدول محصولات ۱---------n جدول واسط
که در جدول واسط فقط اطلاعات لینکی ( کلبد های اصلی هر دو جدول ( به عنوان FK ها ) + کلید اصلی این جدول ) کافی هست
البته این زمانی هست که شما محصولات و تگ ها رو یک entity مجزا در نظر گرفته باشید ( به صورت مسئله شما بر می گرده )
اگر می خواید بیشتر کمک کنم کافیه property های مربوط به هر کدوم رو بنویسید تا بهتون کمک کنم :)
موفق باشید
-
مرسی از بابت پاسخ.
فرمایشات شما کاملا متین هستش.
راستش الان فهمیدم که من دچار چه اشتباهی شده بودم.
با چیزی که من دنبالش بودم، در واقع ارتباط بین تگها پیدا میشد. به این ترتیب که شما میتونستید بررسی کنید که یک تگ با چه تگهای دیگهای رابطه داره؟
که به نظر پرس و جوی بیارزشی میاد!
دونستن اینکه مثلا تگ «کیف» با تگ «تارگوس» رابطه داره به درد این مکانیزم نمیخوره مگه اینکه بخواهیم یک موتور جستجوی هوشمند تدارک ببینیم!
یعنی گوگل رو از اول بسازیم! چه شود!!!
در مورد بانک اطلاعاتی هم به نظرم حداقل لایق یک زیر انجمن در بخش برنامه سازی هست! چون مثل ماهواره و آشپزی و معرفی نرم افزار بیربط به تالار گفنگوی اوبونتو نیست.
خدا خیرشون بده، بابا من اینجا تالار کافه تریا هم دیدم! نه اینکه بده، ولی خب دیگه... ;)
-
مرسی از بابت پاسخ.
فرمایشات شما کاملا متین هستش.
راستش الان فهمیدم که من دچار چه اشتباهی شده بودم.
با چیزی که من دنبالش بودم، در واقع ارتباط بین تگها پیدا میشد. به این ترتیب که شما میتونستید بررسی کنید که یک تگ با چه تگهای دیگهای رابطه داره؟
که به نظر پرس و جوی بیارزشی میاد!
دونستن اینکه مثلا تگ «کیف» با تگ «تارگوس» رابطه داره به درد این مکانیزم نمیخوره مگه اینکه بخواهیم یک موتور جستجوی هوشمند تدارک ببینیم!
یعنی گوگل رو از اول بسازیم! چه شود!!!
در مورد بانک اطلاعاتی هم به نظرم حداقل لایق یک زیر انجمن در بخش برنامه سازی هست! چون مثل ماهواره و آشپزی و معرفی نرم افزار بیربط به تالار گفنگوی اوبونتو نیست.
خدا خیرشون بده، بابا من اینجا تالار کافه تریا هم دیدم! نه اینکه بده، ولی خب دیگه... ;)
درود
البته این رابطه هم به راحتی در میاد و فقط کافیه یه self join بر روی table واسط بزنید با شرط برابر بودن FK کالا در جدول واسط