💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ علی حبیبی
نحوه تعیین موجودیت‌های دیتا بیس
جامعه پی اچ پی ایجاد شده در ۲۷ فروردین ۱۳۹۹

سلام استاد میفرمایید که بعد از نیاز سنجی نیازهای مشتری و طراحی رابط کاربری میریم سراغ طراحی دیتا بیس سوالم اینه که موجودیت‌های دیتا بیس ، یعنی جدول درسته؟ یعنی هر موجودیت یک جدول و اگر این جوری باشه چرا اینکارو میکنیم مثلا شما میگید اگر تسک‌ها تگ داشت اونم میشد یه موجودیت دیگه اما من میگم خوب چرا یک فیلد(ستون) درون موجودیت تسک نباشه یک مقدار بیشتر درباره اینکه تحلیل درست دیتا بیس چیه امکانش هست توضیح بدید چون من حس میکنم چه تگ جدول جدا باشه چه درون جدول تسک ، نرم افزار ما کار میکنه ولی یقینا یکی از این دو حالت بهینه هست از کجا بفهمیم؟؟

سلام

خودم به شخصه فکر میکنم که tagهای ما بهتره یک فیلد باشه و نیازی به یک جدول مستقل نباشه، این کاملا درسته که موجودیت‌های ما همان جداول هستند، ولی بعضی اوقات شاید شما بخواهید که یک جدول مستقل از tagها داشته باشید تا دسترسی راحت‌تر به مقادیر داشته باشی.

شاید نمونه اینو بشه به جدول دسته بندی (Category) اشاره کرد که شما در یک جدول دسته بندیو تعریف میکنی و از اونا استفاده میکنی.

این نظر من بود قطعا پاسخ استاد به سوال شما بهتر خواهد بود.

امیر صالحی ۲۷ فروردین ۱۳۹۹، ۱۲:۱۸

سلام.

راه بهینه اینه که یک جدول جدا مخصوص تگ‌ها ایجاد کنید.

درسته که میتونید با یک فیلد تگ، کارتونو راه بندازید، ولی به افزونگی داده هم فکر کنید، یک نکتش اینه که بارها و بارها تگ‌های تکراری داخل فیلد تگ قرار میگیره و این خودش افزونگی داده داره. در صورتی که اگر یک جدول جدا در نظر گرفته بشه، از تگهای تکراری جلوگیری میشه و حتی مدیریت بهتری روی تگها دارید.

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

یک جدول تسک داریم.

یک جدول تگ داریم.

و یک جدول واسط که هر تسک رو به یک تگ متصل کنه.

برای مثال این جدول task_id و tag_id داره و این دو فیلدهم باهم PK گذاشته میشن.علت اینکار اینه از تگ تکراری برای هر تسک جلوگیری بشه. برای مثال اگر task_id برابر ۱ باشه و یک تگی در جدول تگ، tag_id ایش برابر ۲ باشه، وقتی دوفیلد باهم PK (یا اینکه unique) شده باشن:

task_id        tag_id
-----------------------
    1             2
    1             3
    1             9
    2             2

 

همونطور که جدولو میبینید، task_id=۱ و tag_id=۲ فقط یکبار میتونه در جدول قرار بگیره. چون دو فیلد باهم PK شدن و از تکرار جلوگیری میکنه. یا ۲-۲ هم یکبار و ...

مثال واضح‌تر اگه بزنم اینه که مثلا اگر فیلد name و family در یک جدول داشته باشیم و هر دو فیلد رو باهم unique کنیم اگر name=mohsen و family=movahed باشه، در اون جدول mohsen movahed فقط یکبار ثبت میشه و عضو دیگری بعنوان mohsen movahed نمیتونیم داشته باشیم.

 

* در ضمن اگر قرار باشه برای هر تسک فقط یک تگ در نظر گرفته بشه، در اینصورت دیگه نیاز به جدول واسط(جدول سوم) نیست و فقط کافیه در جدول تسک یک tag_id بعنوان کلید خارجی به جدول تگ اضافه بشه.

محسن موحد ۲۷ فروردین ۱۳۹۹، ۱۴:۲۵