View Full Version : Relation دادن برای فیلدی غیر کلیدی
minaalamshahi
دوشنبه 03 مهر 1391, 09:07 صبح
با سلام
من یه جدول دارم که شامل فیلد های پایین هست
Rol_Id*****Rol_Name
که من برای Rol_Id رو Identity رو true کردم اما برای اینکه نام تکراری نگیرم به جای select توی برنامه این فیلد رو کلید گذاشتم
اما مشکلی که دارم حالا می خوام Rol_Id در این جدول رو با Rol_Id توی جدول User هام Relation بدم اما چون این فیلد کلید نیست بهم اجازه نمیده.
به نظر شما چه کار میشه کرد که توی برنامه نیام این uniq بودن رو چک کنیم و relation رو هم بتونیم برقرار کنیم.
mannai29
پنج شنبه 06 مهر 1391, 15:03 عصر
شما نباید ستون نام رو کلید انتخاب می کردید ، بلکه باید یک یونیک ایندکس براش می ساختید تا تکراری نباشه.
بعدش هم کلید رو همون ستون آی دی بزارید تا مشکلی پیش نیاد
minaalamshahi
شنبه 08 مهر 1391, 12:18 عصر
یونیک ایندکس یعنی چطوری؟
minaalamshahi
شنبه 08 مهر 1391, 12:28 عصر
یونیک ایندکس رو پیدا کردم و درست هم داره بهم جواب میده اما آیا منطقی هست که من یه یونیک ایندکس دیگه تعریف کنیم برای چک کردن عدم تکرار؟
حمیدرضاصادقیان
شنبه 08 مهر 1391, 14:45 عصر
سلام.
Unique Index نوعی ایندکس برای فیلد مورد نظر هست.اگر اون فیلد زیاد دستخوش تغییرات هست پیشنهاد میدم به جای Unique Index از Check Constraint استفاده کرده و با یک تابع چک کنید ببینید مقدار وجود داره یاخیر.
minaalamshahi
دوشنبه 10 مهر 1391, 08:53 صبح
با Check Constraint چطور می تونم این کار و انجام بدم؟
minaalamshahi
دوشنبه 10 مهر 1391, 09:40 صبح
اینو دادم جواب نمیده
ALTERTABLE PersonsADD UNIQUE (P_Id)
طبق چیزی که خوندم
میتواند زمانی که یک جدول ساخته میشود و یا بعد از ساخته شدن آن ( همراه دستور ALTER TABLE که بعدا توضیح خواهیم داد) مشخص شود.
ما بر روی CONSTRAINTS های زیر تمرکز میکنیم.
* NOT NULL
* UNIQUE
* PRIMARY KEY
* FOREIGN KEY
* CHECK
* DEFAULT
که حالا چک می تونست چک uniq باشه
درست فهمیدم؟
اگه درسته پس خطای کد کجاست؟
http://webfocus.ir/portal/sql-constraints.html
http://webfocus.ir/portal/sql-check.html
حمیدرضاصادقیان
دوشنبه 10 مهر 1391, 09:43 صبح
اینجا (http://msdn.microsoft.com/en-us/library/ms187550.aspx) و اینجا (http://msdn.microsoft.com/en-us/library/58xz3zdd%28v=vs.80%29.aspx) رو ببینید.
minaalamshahi
دوشنبه 10 مهر 1391, 11:07 صبح
من به صورت زیر یه قسمتی رو نوشتم
CREATEFUNCTION CheckFnctn1( @Type_Name nvarchar(100))
RETURNSint
AS
BEGIN
DECLARE @retval int
SELECT @retval =COUNT(*)FROM tType whereType_Name=@Type_Name
RETURN @retval
END;
GO
ALTERTABLE tType
ADDCONSTRAINT chkRowCount1 CHECK (dbo.CheckFnctn1(Type_Name)=0 );
GO
//----------------------------------------------------
اما اینکه چطور به من حالا اجازه نمیده که داده تکراری بشه نمیدونم.
من الان توی function چک می کنم تعداد ردیفهای با name داده شده توسط پارامتر رو دارم یا نه اما اگر که داده ای با این نام وجود داشت و count>=1 شد حالا constrint من چطوری داره با این funct کار می کنه؟
منظورم اینه که آیا من غیر از کدی که نوشتم باید کار دیگه ای هم انجام بدم یا نه الان دیگه جدول کم داده تکراری نمی گیره؟
minaalamshahi
دوشنبه 10 مهر 1391, 11:57 صبح
ALTER TABLE tProduct
ADD CONSTRAINT chkProduct UNIQUE(Product_Name)
از این هم استفاده کردم درست جواب داد
منطقا درسته؟
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.