سلام دوستان
من همیشه تو جداولی که طراحی می کنم نو ع داده ای رو برای کلید اصلی int می گیریم ، به نظر شما بهترین نوع همینه و دلایل اصلی برای استفاده از این توع چیه؟
با تشکر
سلام دوستان
من همیشه تو جداولی که طراحی می کنم نو ع داده ای رو برای کلید اصلی int می گیریم ، به نظر شما بهترین نوع همینه و دلایل اصلی برای استفاده از این توع چیه؟
با تشکر
سلام.
انتخاب کلید اصلی این نیست که در هرجدول یک فیلد id بذارید بشه کلید اصلی.
ممکنه در یک جا کدملی شخص باشه. ممکنه یک جا شماره تلفن باشه و ....
باید به ساختار جداول نگاه کرد.
الزاما این نیست که حتما هم باید int باشه. بسته به نوع داده ای که برای مامهم هست یونیک باشه کلید رو انتخاب میکنیم و تایپش هم همون تایپ خود فیلد است.
Telegram : @SQL_Server
سلام
به نظر من کلید اصلی جداول ما بسته به تعداد سطرهای آن جدول می تواند (smallint،intو bigint) باشد.
این نوع تعریف کلید اصلی بعداً در گزارشات برنامه کار رو خیلی راحت تر می کنه.
تعریف کردن کد ملی و یا شماره تلفن به عنوان کلید اصلی ممکنه در دراز مدت و عمر پروژه شما مشکل ساز بشه. مثلاً ممکنه کد ملی های صادر شده از طرف اداره ثبت اسناد عوض بشه و یا اینکه شماره تلفنهای 7 رقمی در آینده تبدیل به 8 رقمی شوند.
نوع تعریف کلید اصلی ارتباطی با گزارشات نداره.این نوع تعریف کلید اصلی بعداً در گزارشات برنامه کار رو خیلی راحت تر می کنه.
ماهیت کلید اصلی چیست؟
کلید اصلی برای این در جداول قرار داده میشه :
1- اطلاعات هر ردیف به صورت یونیک باشند.
2- اطلاعات هر ردیف وابسته به کلید اصلی باشند.
3- افزایش سرعت در گزارشات
خوب با این تعاریف این نیست که برای هر جدول ما بیایم یک فیلد Auto Increment قرار بدیم و به عنوان کلید ازش استفاده کنیم.
مثلا در سیستم انبار در قسمت تعریف کالا کد کالای شما دارای کاراکتر هم هست. باید حداقل 16 رقم باشه.و همچنین باید یونیک هم باشه. پس اینجا کد کالای شما که از نوع char یا varchar قرار داده میشه باید کلید شما بشه.
این رو به صورت یک مثال عرض کردم.تعریف کردن کد ملی و یا شماره تلفن به عنوان کلید اصلی ممکنه در دراز مدت و عمر پروژه شما مشکل ساز بشه. مثلاً ممکنه کد ملی های صادر شده از طرف اداره ثبت اسناد عوض بشه و یا اینکه شماره تلفنهای 7 رقمی در آینده تبدیل به 8 رقمی شوند.
اگر هم نیاز به تغییر باشه شما کار خاصی نیازی نیست انجام بدید. فقط طول فیلد شما تغییر میکنه و ارتباطی به کلید بودن یا نبودنش نداره. اگر کلید نباشه یعنی شما طول فیلد یا نوعش رو عوض نمیکنید؟؟!!
Telegram : @SQL_Server
نکاتی که باید در نظر گرفته شوند:
1.این کلید اصلی به صورت کلید خارجی در سایر جداول هم استفاده می شه.
2.مقایسه نوع داده int در گزارشات راحت تر از نوع داده nvarchar هست.
3.جلوگیری از انواع خطاهای تعریف کلیدهای یکتا
من دیدم که یک مدل ماشین یکسان در دو شهر مختلف دارای یک شماره پلاک مساوی بودند.
خوب این چه تناقضی با نوع داده کلید داره؟؟این کلید اصلی به صورت کلید خارجی در سایر جداول هم استفاده می شه.
خیر تفاوت محسوسی نداره.مقایسه نوع داده int در گزارشات راحت تر از نوع داده nvarchar هست.
لطفا یک مثال درباره صحبتتون بیان کنید.جلوگیری از انواع خطاهای تعریف کلیدهای یکتا
شاید پلاکها یکی باشند ولی کد ایران 11و22و... به تفکیک استان های مختلف فرق داره.من دیدم که یک مدل ماشین یکسان در دو شهر مختلف دارای یک شماره پلاک مساوی بودند.
اگر دو پلاک یکی باشه میدونید در سیستم نیروی انتظامی چه افتضاحی به بار میاد. هربار که یکی رو جریمه می کنند برای دو نفر یا چند نفر جریمه درج میشه.!!
Telegram : @SQL_Server
سلام،
در انتخاب نوع داده ای برای کلید اصلی باید ابتدا ببینیم چه صفتی از موجودیتی که قرار است جدول آن را ایجاد کنیم می تواند آن موجودیت را از سایرین تفکیک کند هر کدام از این صفات که هزینه کمتری را تحمیل کند همان را انتخاب می کنیم. ماهیت آن صفت تعیین کننده نوع داده ای کلید اصلی جدول است نه اینکه همیشه کلید اصلی از نوع اعداد صحیح باشد!
مثلاً در مورد اتوموبیل باید پلاک آن را به عنوان کلید در نظر بگیریم چون ما به دنبال اتوموبیلی با پلاکی خاص هستیم. پلاک هم نوع داده ای متنی است نه عددی. ما می توانیم پلاک را به عنوان کلید در نظر نگیریم و خودمان یک ستون عددی اضافه کنیم و آن را کلید اصلی درنظر بگیریم علاوه بر این ستون پلاک را هم اندیس کنیم چون قرار است بر حسب پلاک جستجو کنیم. اما با اضافه کردن فیلد عددی جدید چه اتفاقی می افتد؟ در حالی که ما به دنبال اتوموبیلی با فلان پلاک هسیم و جستجوی ما بر پایه این فیلد است نه آن فیلد عددی!