تفاوت primary و unique

این تاپیک 16 پاسخ و 3 مشارکت کننده دارد . آخرین آپدیت توسط :  لقمان آوند ،‏ 3 سال و 3 ماه پیش .

این تاپیک تاکنون 2121 بازدید داشته است .

نویسنده پست
جمعه ، 16 آگوست 2013     2:46 ب.ظ #


مهشاد کلانتری

Author
VIP
432 پست67 تاپیک

تفاوت کلید primary و ایندکس unique چیه؟

0  تشکر
جمعه ، 16 آگوست 2013     5:21 ب.ظ #


کیوان علی محمدی

Authorplus
VIP
1792 پست4 تاپیک

سلام primary یکیه اما unique رو میتونی برای چند تا ستون تعریف کنی.

0  تشکر
جمعه ، 16 آگوست 2013     5:23 ب.ظ #


مهشاد کلانتری

Author
VIP
432 پست67 تاپیک

پس چرا بعضی وقت ها چند تا کلید primary تعریف میکنن؟

0  تشکر
جمعه ، 16 آگوست 2013     7:58 ب.ظ #


کیوان علی محمدی

Authorplus
VIP
1792 پست4 تاپیک

تا اونجایی که من میدونم Primary توی هر جدول یکیه و بس.

0  تشکر
جمعه ، 16 آگوست 2013     8:36 ب.ظ #


مهشاد کلانتری

Author
VIP
432 پست67 تاپیک

آخه مستندات laravel یه همچین چیزی داره:

$table->primary('id');
Adding a primary key

$table->primary(array('first', 'last'));
Adding composite keys

بعد من تو یه کتابی هم که داشتم یه جاییش 2تا تعریف کرده بود مثلا یه id و یکی آدرس ایمیل بود که جفتش رو primary کرده بود و من هنوز درگیر اینم که چرا unique نکرده بود! درصورتی که توی توضیحاتش نوشته بود ستون آدرس ایمیل رو یکتا تعریف میکنیم که اگر یه آدرس ایمیلی وجود داشت دیگه ثبت نشه!!! 😮

0  تشکر
جمعه ، 16 آگوست 2013     8:46 ب.ظ #


کیوان علی محمدی

Authorplus
VIP
1792 پست4 تاپیک

توی SQL Server نمیشه این کارو کرد،اما توی My SQL که  از Engine  مختلفی استفاده میکنه تست نکردم.

0  تشکر
جمعه ، 16 آگوست 2013     9:25 ب.ظ #


کیوان علی محمدی

Authorplus
VIP
1792 پست4 تاپیک

انگاری این کارو  برای performance بهتر انجام میدن تا سرعت پردازش ها بهتر بشه،ولی بهتره شما برای منحصر به فرد بودن ستون های دیگه از همون unique استفاده کنید،جالبه من نمیدونستم اینو، ولی خوب حالا میدونم :)

1  تشکر
شنبه ، 17 آگوست 2013     12:40 ق.ظ #


لقمان آوند

مدیر ارشد
VIP
1704 پست5 تاپیک

[quote=14595]بعد من تو یه کتابی هم که داشتم یه جاییش 2تا تعریف کرده بود مثلا یه id و یکی آدرس ایمیل بود که جفتش رو primary کرده بود و من هنوز درگیر اینم که چرا unique نکرده بود! درصورتی که توی توضیحاتش نوشته بود ستون آدرس ایمیل رو یکتا تعریف میکنیم که اگر یه آدرس ایمیلی وجود داشت دیگه ثبت نشه!!![/quote]

سلام

در تکمیل بحث های انجام شده بگم که :

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

تو مثالی که شما گذاشتید  $table->primary(array('first', 'last')); یک کلید primary ترکیبی از ستون های first و last هست و نه دو کلید primary مجزا برای این جدول !

خودتون هم عبارت Adding composite keys رو در متن پستتون گذاشتید برای این تکه کد که به معتی افزودن یک کلید ترکیبی هست .

دلیل استفاده از کلیدهای ترکیبی هم اینه که بعضی مواقع یک ستون تنها ، مقادیرش یکتا نیست ولی با در نظر گرفتن دو یا سه ستون با هم مقادیر ترکیبی یکتا و متفاوت خواهند بود که این یکتایی لازمه ی primary key بودن هست !

جدولی رو در نظر بگیرید که شماره ملی افراد کل جهان در کشور خودشون ، اطلاعات اونها و نام کشورشون ستون های مختلف جدول باشند . شماره ملی در هر کشور unique هست . ولی ممکنه شماره ملی های تکراری بین دو کشور مختلف وجود داشته باشه . مثلا تو ایران فقط یک نفر شماره ملی 12345 داره ، ولی ممکنه کسی تو آمریکا ، سوئد و یا چین هم در کشور خودش چنین شماره ملی ای داشته باشه ! پس در سطح جهانی شماره ملی unique نیست ولی در یک کشور هست . و در نتیجه یک کلید primary مناسب می تونه استفاده ی ترکیبی از دو ستون کشور و شماره ملی باشه که در سطح جهان هم unique خواهد بود !

در mysql هم کلید ترکیبی رو با چنین کدی میشه ساخت :

3  تشکر
شنبه ، 17 آگوست 2013     12:44 ق.ظ #


مهشاد کلانتری

Author
VIP
432 پست67 تاپیک

تشکر، پس یعنی این نیست که دوتا کلید primary جدا تعریف بشه و دو تاش باهم درواقع یک کلید هست درسته؟

0  تشکر
شنبه ، 17 آگوست 2013     12:48 ق.ظ #


کیوان علی محمدی

Authorplus
VIP
1792 پست4 تاپیک

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

1  تشکر
پست 1 تا 10 (از مجموع 17 پست)

برای پاسخ دادن به این تاپیک باید وارد سایت شوید .