PDA

View Full Version : نحوه تعریف یک فیلد به عنوان Unique Constraint



A.Yousefi
جمعه 08 اردیبهشت 1391, 00:26 صبح
سلام
من یه تیبل دارم که توش اطلاعات کاربرانم رو ذخیره میکنم،از قبیل نام،سن،ایمیل و ...
یه فیلد ID دارم که کلید اصلیه،میخوام محتوای فیلد ایمیلمم تکراری نباشه.
تو یه تیبل که نمیشه دو تا فیلد رو به عنوان کلید اصلی گرفت؟
من باید چیکار کنم؟
فک میکنم باید فیلد ایمیلم رو به عنوان Unique Constraint در نظر بگیرم،اما در مورد این نوع فیلد و اینکه چجوری باید تو sql اینکار رو انجام بدم اطلاعاتی ندارم،اگه ممکنه منو راهنمایی کنین.
فقط خواهشا خیلی حرفه ای راهنمایی نکنید چون من توزمینه sql آماتورم.:خجالت:

حمیدرضاصادقیان
جمعه 08 اردیبهشت 1391, 01:31 صبح
سلام.
روی جدول راست کلیک کنید و به قسمت Design برید و در قسمت indexes/keys کلیک کرده و دکمه add رو بزنید فیلد مورد نظر رو انتخاب کنید و گزینه unique رو انتخاب کنید و از type هم به جای index گزینه unique key رو انتخاب کنید.

A.Yousefi
جمعه 08 اردیبهشت 1391, 13:21 عصر
آقای صادقیان ممنون،مشکلم حل شد.
میشه یه توضیح در مورد فیلدهایی که Unique تعریف میشن بدین؟
منظورم اینه که آیا این فیلد ها هیچ تفاوتی با فیلدهای کلید اصلی ندارن؟
یعنی میشه اینارو هم به فیلدهایی که کلید خارجین وصل کرد؟
اگه اینا هیچ فرقی با کلید خارجی ندارن اصلا چرا این محدودیت رو گذاشتن که فقط یه فیلد رو بشه به عنوان کلید خارجی تعریف کرد،بعد اگه لازم شده فیلدهای دیگه ای هم یکتا باشن اونارو Unique تعریف کرد؟:متفکر:

حمیدرضاصادقیان
جمعه 08 اردیبهشت 1391, 13:54 عصر
این فیلدها با کلیدهای خارجی و اصلی تفاوت دارند.
در نوع ساختاری که در Page های فایل mdf دارند. شما وقتی که PK تعریف میکنید اطلاعات رو براساس اون فیلد در Page ها به صورت فیزیکی مرتب میکنید.
و وقتی که ایندکس تعریف میکنید به صورت مجازی داده ها مرتب می شوند و یک لیست داره که مرتب هست و به داده های روی Page اشاره میکنه.
شما وقتی یک فیلد رو از نوع Unique تعریف میکنید دارید مشخص میکنید که مقدارش نمیتونه تکراری باشه.همین!
بحث کلید خارجی با Unique تفاوت داره .کلید خارجی برای ارتباط بین دو جدول به کار میره که بتونیم مشخص کنیم نشه در جدول فرزند رکوردی درج کرد که هیچ رکورد مرتبطی در جدول پدر نداره.
که میتونه Unique هم باشه.

A.Yousefi
جمعه 08 اردیبهشت 1391, 14:04 عصر
من تو یکی از جداولم Username,password و سایر اطلاعات کاربرا رو ذخیره میکنم،خب قطعا Username یه فیلد منحصر به فرده و کاربرا نمیتونن Username تکراری داشته باشن،به نظر شما اینجا لازمه که یه فیلد ID هم به جدولم اضافه کنم؟
با توجه به اینکه فیلد Username خودش باعث میشه هر رکورد از رکورد بعدیش متمایز بشه عرض کردم خدمتتون،هرچی فک میکنم میبینم اینجا فیلد ID بی مصرفه.

حمیدرضاصادقیان
جمعه 08 اردیبهشت 1391, 14:22 عصر
مشکلی نداره.ولی وقتی یک فیلد ID رو در نظر میگیرن در واقع در کل سیستم کاربران رو با یک کد شناسایی میکنند همچنین جستجو و مرتب سازی روی فیلدهای عددی سریعتر از نوع کارکتر هست.

DataMaster
جمعه 08 اردیبهشت 1391, 23:39 عصر
در نظر گرفتن یه فیلد ID این امکان رو به شما میده که بتونید نام کاربری رو بعدا تغییر بدین
یه چیزی شبیه همین فروم ، اگه دقت داشته باشید هر نام کاربری باید یکتا باشه ولی توی عملیات متوجه می شید که بر اساس کد ID داره کاربر رو شناسایی میکنه

A.Yousefi
شنبه 09 اردیبهشت 1391, 10:36 صبح
در نظر گرفتن یه فیلد ID این امکان رو به شما میده که بتونید نام کاربری رو بعدا تغییر بدین

خب اگه فیلد ID نداشته باشم نمیتونم نام کاربری کاربرا رو بعدا تغییر بدم؟
بر اساس نام کاربری جستجو رو انجام میدم و بعد اونو تغییر میدم دیگه.
البته قبول دارم جستجو بر اساس ID خیلی سریع تر و راحتتر انجام میشه و فک میکنم همین باید دلیل اسافاده ازID باشه نه اینکه در صورت عدم استفاده از اون بعدا امکان تغییر نام کاربری وجود نداره.