Hossein.Dsh
شنبه 03 اردیبهشت 1390, 11:38 صبح
سلام
من نیاز دارم بانکی طراحی کنم که هر نوع کالایی رو بشه داخلش ثبت کرد.
به این نکته توجه کنید گفتم هر نوع کالا. «ماشین، کامپیوتر، موبایل، کمد، جوراب!... و خصایص هر کالا با کالای دیگر متفاوت است. مثلا کامپیوتر خصیصه نام پردازنده دارد اما ماشین و ... نه.
این نکته هم حائز اهمیته که نوع کالا باید انعطاف پذیر باشه یعنی در حالت اجرا بتوان نوع کالای جدید تعریف کرد و نیازی نباشه در ساختار بانک تغییر ایجاد کنیم.
بنابراین این راه حل که برای هر کالا جدولی متفاوت ایجاد کنیم منتفی است.
اما من یک راه حل پیدا کردم که ذکر میکنم و میخوام بدونم آیا منطقی هست و یا راه حل بهتری هست یا نه:
ما یک جدول نوع «Type» تعریف میکنیم و یک جدول کالا «Product».
در جدول Type انواع کالا را تعریف میکنیم. به این صورت که هر ردیف جدول معرف یک نوع کالاست. دقت کنید که معرف نوع کالاست نه خود کالا. هر کالا در جدول Product یک ارتباط با این جدول دارد که مشخص کننده نوع و نام خصایص کالاهاست.
مثال برای یک دوربین:
مشخصات کلی2011/04/20تاریخ معرفی :
حرفه اینوع :
133 × 100 × 80 mmابعاد :
بدنه 515 گرموزن :
مشکیرنگ :مشخصات حسگر و تصویرCMOSنوع حسگر :
18.7 مگاپیکسلدقت حسگر :
18 مگاپیکسل
در جدول بالا «مشخصات کلی» و «مشخصات حسگر و تصویر» گروه مشخصات است که هر کدام شامل تعدادی مشخصه با تعداد نامعلوم است.
من عنوان هر گروه را به همراه عنوان هر مشخه از آن گروه را به صورت زیر در جدول Type تعریف میکنم:
ردیف 1 از جدول Type:
id - نام نوع مثل: دوربین عکاسی - گروه مشخصات 1: مشخصات کلی#تاریخ معرفی#ابعاد و...
و بدین ترتیب در هر فیلد جدول نوع یک گروه از مشخصات قرار میگیرد که با یک کاراکتر از هم جدا شده اندو اولین کلمه نام گروه است (مشخصات کلی) و بقیه فیلد های آن هستند.
اما در جدول کالا هر کالایی که از نوع دوربین باشد فیلد متناظر با گروه دوربین آن مقادیر مشخصه ها را به صورت زیر نگهداری میکند:
یکی از ردیفهای جدول Product:
id - idنوع - مقادیر گروه یک از جدول نوع مثل گروه «مشخصات کلی» : 2011/04/20#133 × 100 × 80 mm# و...
خوب بدین صورت جدول انعطاف پذیری بالایی پیدا خواهد کرد و علاوه بر اینکه هر نوع کالا را که قبول میکند، در زمان اجرا نیز قابل تغییر است و میتوان به هر گروه از کالاها مشخصاتی را اضافه یا حذف کرد. البته جدول از حالت ریاضی و رابطه ای کمی خارج شده و برنامه نویسی نیز سخت تر خواهد شد.
آیا این کار درست است؟ ایده بهتری دارید؟
من نیاز دارم بانکی طراحی کنم که هر نوع کالایی رو بشه داخلش ثبت کرد.
به این نکته توجه کنید گفتم هر نوع کالا. «ماشین، کامپیوتر، موبایل، کمد، جوراب!... و خصایص هر کالا با کالای دیگر متفاوت است. مثلا کامپیوتر خصیصه نام پردازنده دارد اما ماشین و ... نه.
این نکته هم حائز اهمیته که نوع کالا باید انعطاف پذیر باشه یعنی در حالت اجرا بتوان نوع کالای جدید تعریف کرد و نیازی نباشه در ساختار بانک تغییر ایجاد کنیم.
بنابراین این راه حل که برای هر کالا جدولی متفاوت ایجاد کنیم منتفی است.
اما من یک راه حل پیدا کردم که ذکر میکنم و میخوام بدونم آیا منطقی هست و یا راه حل بهتری هست یا نه:
ما یک جدول نوع «Type» تعریف میکنیم و یک جدول کالا «Product».
در جدول Type انواع کالا را تعریف میکنیم. به این صورت که هر ردیف جدول معرف یک نوع کالاست. دقت کنید که معرف نوع کالاست نه خود کالا. هر کالا در جدول Product یک ارتباط با این جدول دارد که مشخص کننده نوع و نام خصایص کالاهاست.
مثال برای یک دوربین:
مشخصات کلی2011/04/20تاریخ معرفی :
حرفه اینوع :
133 × 100 × 80 mmابعاد :
بدنه 515 گرموزن :
مشکیرنگ :مشخصات حسگر و تصویرCMOSنوع حسگر :
18.7 مگاپیکسلدقت حسگر :
18 مگاپیکسل
در جدول بالا «مشخصات کلی» و «مشخصات حسگر و تصویر» گروه مشخصات است که هر کدام شامل تعدادی مشخصه با تعداد نامعلوم است.
من عنوان هر گروه را به همراه عنوان هر مشخه از آن گروه را به صورت زیر در جدول Type تعریف میکنم:
ردیف 1 از جدول Type:
id - نام نوع مثل: دوربین عکاسی - گروه مشخصات 1: مشخصات کلی#تاریخ معرفی#ابعاد و...
و بدین ترتیب در هر فیلد جدول نوع یک گروه از مشخصات قرار میگیرد که با یک کاراکتر از هم جدا شده اندو اولین کلمه نام گروه است (مشخصات کلی) و بقیه فیلد های آن هستند.
اما در جدول کالا هر کالایی که از نوع دوربین باشد فیلد متناظر با گروه دوربین آن مقادیر مشخصه ها را به صورت زیر نگهداری میکند:
یکی از ردیفهای جدول Product:
id - idنوع - مقادیر گروه یک از جدول نوع مثل گروه «مشخصات کلی» : 2011/04/20#133 × 100 × 80 mm# و...
خوب بدین صورت جدول انعطاف پذیری بالایی پیدا خواهد کرد و علاوه بر اینکه هر نوع کالا را که قبول میکند، در زمان اجرا نیز قابل تغییر است و میتوان به هر گروه از کالاها مشخصاتی را اضافه یا حذف کرد. البته جدول از حالت ریاضی و رابطه ای کمی خارج شده و برنامه نویسی نیز سخت تر خواهد شد.
آیا این کار درست است؟ ایده بهتری دارید؟