آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

تعریف یک کلید اصلی (primary key)

دوره های مرتبط با این مقاله

تعریف یک کلید اصلی (primary key)

هر جدول باید دارای یک کلید اصلی باشد. کلید اصلی یک مقدار خاص و غیرتهی (non-null) می باشد که یک ردیف را در دیتابیس شناسایی می کند. یکی از مهمترین موضوعات مورد بحث در دنیای SQL Server تصمیم در مورد نوع داده ای است که بهترین کلید اصلی را می سازد.

توضیحات

شما همیشه باید راهی خاص برای شناسایی و دسترسی به یک ردیف داشته باشید. این یکی از اصول در پشت اولین فرم نرمال (First Normal Form) می باشد. اگر ستون داده نیاز به آپدیت شدن داشته باشد یت یک ردیف خاص پاک شود، چه اتفاقی می افتد؟ چگونه می توانید تعیین کنید که کدام ردیف ها نیاز به فعالیت دارند؟ علاوه بر طراحی محض، کلیدهای اولیه برای برخی ویژگی های SQL Server (مانند Transactional Replication) ضروری می باشند.

چندین گزینه ی متداول برای تعریف کلید اصلی وجود دارد که عبارتند از:

  • ستون های صحیح (integer columns)
  • ستون های شناسه ی منحصر به فرد (unique identifier)
  • کلیدهای منحصر به فرد طبیعی تشکیل شده از یک ستون یا بیشتر از یک ستون در جدول

اولین گزینه ی متداول تعریف یک ستون صحیح به عنوان کلید اصلی می باشد. شما می توانید برنامه ی خود را داشته باشید و مقداری به آن اختصاص دهید و یا می توانید یک پراپرتی ماهیت به ستون صحیح اختصاص دهید ( به عنوان مثال ماهیت int (1,1) ) و به SQL Server اجازه می دهد تا برای شما مقدار تولید کند. اگر شما در حال کار با برنامه های توزیع شده (distributed application) هستید و یا برنامه ای می تواند در آینده توزیع شود، احتمالا یک ستون صحیح بهترین شرط برای شما نخواهد بود. احتمالا در هنگام جمع آوری داده از سایت های توزیع شده ی مختلف، collosionهای کلید اولیه وجود خواهد داشت، زیرا مقدار همان کلید اولیه در دیتابیس های مختلف وجود داشته باشد. در این مورد برای ساختن ستون uniqueidentifier (GUID) کلید اولیه شرط بهتری می باشد. مانند پراپرتی ماهیت برای اعداد صحیح، می توانید SQL Server را انتخاب کنید تا با تعیین NEWID() یا NEWSEQUENTIALID() برای شما مقدار تولید کند. تفاوت چیست؟ NEWID() به طور تصادفی مقداری را اختصاص خواهد داد در حالیکه NEWSEQUENTIALID() یک مقدار پی در پی را اختصاص می دهد. این یک بررسی مهم می باشد. در این مورد ترجیح من استفاده از NEWSEQUENTIALID() میباشد، به ویژه اگر کلید اولیه در جدول clustered index می باشد زیرا قطعه ی منطقی جدول را کوتاه می کند.

گزینه ی متداول دیگر استفاده از کلید طبیعی مانند کلید اصلی می باشد. برای نمونه یک کلید اولیه ی طبیعی می تواند ترکیبی از LastName, FirstName, و MiddleName باشد. می پذیرم که در مقابل این دیدگاه به دو دلیل نظر مساعدی ندارم. اول اینکه همه ی ستون ها نباید برای این نمونه پوچ Null باشند تا موثر باشد. دوم اینکه هر جدول کوچکی نیاز به داشتن ستون های همین گروه دارد تا ارتباط یک کلید خارجی را انتشار دهد. علاوه بر این اگر هرکدام از ستون ها در کلید اولیه ی طبیعی (natural primary key) نیاز به تغییر داشته باشد چطور؟ این امر آپدیت کردن همه ی ورودی ها را لازم می کند.

در اینجا هیچ پاسخ درستی وجود ندارد، گرچه شما در تمام موارد یک بحث پرشور خواهید خواند. گزینه های موجود در مقابل نیازهای خود را ارزیابی کرده و گزینه ای که با آن راحت هستید را انتخاب کنید.

  • 14460
  •    1076
  • تاریخ ارسال :   1394/07/27

دانلود PDF دانشجویان گرامی اگر این مطلب برای شما مفید بود لطفا ما را در GooglePlus محبوب کنید
رمز عبور: tahlildadeh.com یا www.tahlildadeh.com
ارسال دیدگاه نظرات کاربران
شماره موبایل دیدگاه
عنوان پست الکترونیک

ارسال

آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

تمامی حقوق این سایت متعلق به آموزشگاه تحلیل داده می باشد .