PDA

View Full Version : نال بودن کلید خارجی یا 2 جدول



مهدی هادیان2
چهارشنبه 19 بهمن 1390, 10:26 صبح
بسم الله الرحمن الرحیم
با سلام
من در تحلیل سیستم فروش دو نوع فروش کلی و جزئی دارم
فروش کلی مربوط به شرکت ها می باشدو جزئی به اعضای خودشون و افراد عادی
فیلدهایی که مایلند برای شرکت و اشخاص ثبت شود متفاوت است و نمی تونم در یک جدول در نظر بگیرم. بنابراین برای هر کدوم جدول جداگانه ای در نظر گرفتم و باید کلید اصلی این جدول ها در جدول فروش به عنوان کلید خارجی در نظر گرفته شود.
حالا سوال من اینه که به نظرتون در جدول فروش هر دوتا کلید رو قرار بدم و هر بار یکی از اونها پر شود یا اینکه 2تا جدول فروش داشته باشم و با توجه به مباحث ارث بری و ... کار رو دنبال کنم؟
با تشکر

مهدی هادیان2
شنبه 20 اسفند 1390, 19:28 عصر
سلام
آیا برای این مورد قاعده کلی وجود داره یا در شرایط مختلف باید ببینم که نال بودن به صرفه هست یا نه؟
با تشکر

mahan.2002
یک شنبه 21 اسفند 1390, 03:33 صبح
سلام
بنظرم چون شما دو نوع دارد استفاده از دو جدول بهینه تر است
ولی اگر چندین نوع داشتید و این انواع در طول عمر نرم افزار زیاد یا کم میشدند از روش کلید خارجی بهتره استفاده بشه.
در مورد اینکه چرا از دو جدول بهتر است بنظرم چون هزینه Join کمتر است.
موفق باشی.

مهدی هادیان2
چهارشنبه 24 اسفند 1390, 11:38 صبح
سلام
بنظرم چون شما دو نوع دارد استفاده از دو جدول بهینه تر است
ولی اگر چندین نوع داشتید و این انواع در طول عمر نرم افزار زیاد یا کم میشدند از روش کلید خارجی بهتره استفاده بشه.
در مورد اینکه چرا از دو جدول بهتر است بنظرم چون هزینه Join کمتر است.
موفق باشی.
با سلام
از پاسختون ممنون
درست می فرمائید هزینه جوین کمتر است ولی هزینه ای که برای ذخیره کردن داده ها صرف می شود بالا می رود و از طرفی هم تمام مسائل مربوط به آپدیت و ذخیره و دیلیت در دیتا بیس تکرار می شود.
ولی نال بودن هم مشکلات خودش رو داره
با تمام این تفاسیر خوشحال می شم نظر دوستان رو بدونم
با تشکر

یوسف زالی
یک شنبه 28 اسفند 1390, 23:14 عصر
سلام.
به نظر من استفاده از یک جدول درست تره و در کنار اون یک فیلد عددی که مشخص کننده نوع فروش هست.
اگر بنا باشه که از دو جدول استفاده کنید و رکورد ها فقط یک ردیف هست، فیلد های جدول دوم رو در همون جدول اول بگیرید.
اگر فیلد ها بیشتر از یک ردیف هست نباید کلید در جدول پدر باشه. کلید در جدول دوم میاد و اگر هیچ ردیفی وجود نداشت خود بخود استفاده از نال منتفی می شه.
من خیلی متوجه منطق سیستم مورد استفاده شما نشدم.
اما به نظرم روشتون خیلی درست نمیاد.

مهدی هادیان2
دوشنبه 29 اسفند 1390, 10:37 صبح
سلام.
به نظر من استفاده از یک جدول درست تره و در کنار اون یک فیلد عددی که مشخص کننده نوع فروش هست.
اگر بنا باشه که از دو جدول استفاده کنید و رکورد ها فقط یک ردیف هست، فیلد های جدول دوم رو در همون جدول اول بگیرید.
اگر فیلد ها بیشتر از یک ردیف هست نباید کلید در جدول پدر باشه. کلید در جدول دوم میاد و اگر هیچ ردیفی وجود نداشت خود بخود استفاده از نال منتفی می شه.
من خیلی متوجه منطق سیستم مورد استفاده شما نشدم.
اما به نظرم روشتون خیلی درست نمیاد.
با سلام
از پاسختون ممنون
ببینید همون طور که قبلا عرض کردم دو نوع فروش دارم. فروش کلی مربوط به شرکت هاست و فروش جزئی مربوط به افراد عادی ست
اگه بخوام یه جدول داشته باشم اگه فروش کلی بود فیلد مربوط به اشخاص خالی می مونه و اگه جزئی بود فیلد کد شرکت. چراکه در پایگاه داده نمی توان از ارث بری استفاده کرد
و از طرفی شاید افراد دیگه که بخوان نرم افزار رو توسعه بدن ابهام ایجاد شود.
آیا منطق کارم مشکل داره
با سپاس فراوان

یوسف زالی
دوشنبه 29 اسفند 1390, 18:20 عصر
در اشتباهید.
یک فیلد می گیرید برای ارتباط با طرف حساب که می تونه شخص یا شرکت باشه.
یک فیلد برای تعیین نوع.
دو تا جدول هم برای اشخاص و شرکت ها.

mahan.2002
دوشنبه 29 اسفند 1390, 19:08 عصر
در اشتباهید.
یک فیلد می گیرید برای ارتباط با طرف حساب که می تونه شخص یا شرکت باشه.
یک فیلد برای تعیین نوع.
دو تا جدول هم برای اشخاص و شرکت ها.
من با نظر You-See موافقم . اگر حجم اطلاعات جداولتون خیلی زیاد نیست . با توجه به اینکه میفرمایید جدول فروش خیلی راحت تر از این روش استفاده کنید.
ولی من فکر میکنم ایشان منظورشون اینکه ایرادی نداره ما مثلا کیلد خارجی که تعریف کردیم خالی باشه یا همون نال.
بنظرم ایشون میخوان بدونن حالت استاندار برای این کار چه .

یوسف زالی
دوشنبه 29 اسفند 1390, 19:19 عصر
در حالت کلی کلید خارجی می تونه نال هم باشه.

mahan.2002
دوشنبه 29 اسفند 1390, 20:07 عصر
بنظر من هم نال بودن کلید خارجی نمی تونه موردی داشته باشه . و اشکالی ایجاد کنه.

مهدی هادیان2
دوشنبه 29 اسفند 1390, 22:36 عصر
در اشتباهید.
یک فیلد می گیرید برای ارتباط با طرف حساب که می تونه شخص یا شرکت باشه.
یک فیلد برای تعیین نوع.
دو تا جدول هم برای اشخاص و شرکت ها.

با سلام
چه جوری می تونم برای این منظور یک فیلد در نظر بگیرم؟ فیلدهای کد شخص یا کد شرکت کلیدهای خارجی هستن

یوسف زالی
دوشنبه 29 اسفند 1390, 23:01 عصر
می تونید از ارتباط صرف نظر کنید.
یا اینکه همون روش حودتون رو با ارتباط استفاده کنید.
در هر دو صورت برای کنترل پر یا نال شدن فیلد ها می تونید از تریگر یا اس پی استفاده کنید.
حتی می تونید در UI این کنترل رو انجام بدید.

مهدی هادیان2
پنج شنبه 03 فروردین 1391, 20:25 عصر
می تونید از ارتباط صرف نظر کنید.

با سلام
می شه از رابطه صرف نظر کرد؟ در این صورت با چه روشی مشخصات شرکت یا شخص رو داشته باشم؟
با تشکر

mahan.2002
پنج شنبه 03 فروردین 1391, 20:57 عصر
سلام
اگر شما نمی خواهی از دو جدول جدا از هم استفاده کنی و می خواهی با یه جدول با هم ارتباط داشته باشن ، یه جدول فروش در نظر بگیرید که داخلش یه فیلد برای تعیین نوع فروش ( شرکت ، شخص ) ... دو تا فیلد هم برای ارتباط با دو جدول فروش شرکتی و فروش شخصی برای هر جدول یک فیلد به این صورت:
جدول فروش ( شماره فروش ،نوع فروش ، شماره شرکت (کلید خارجی ) ، شماره شخص (کلید خارجی) ، ...)
جدول شرکت ( شماره شرکت ، تاریخ ، قیمت ، ... )
جدول شخص (شماره شخص ، تاریخ ، قیمت ، ... )

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

baktash.n81@gmail.com
شنبه 05 فروردین 1391, 09:52 صبح
سلام ...

چرا جدول مربوط به اشخاص و شرکت ها رو یکی نمی کنید ... می تونید مشخصات اولیه افراد و شرکت ها رو که مشترک هستند روی یک جدول قرار بدید ... و به راحتی مشکل فروشتون حل می شه ...

مهدی هادیان2
یک شنبه 06 فروردین 1391, 12:28 عصر
سلام ...

چرا جدول مربوط به اشخاص و شرکت ها رو یکی نمی کنید ... می تونید مشخصات اولیه افراد و شرکت ها رو که مشترک هستند روی یک جدول قرار بدید ... و به راحتی مشکل فروشتون حل می شه ...
با سلام
نمی تونم این کار رو بکنم؛ فیلدهاشون با هم متفاوتند
با تشکر