PDA

View Full Version : محدودیت unique برای دو ستون (؟)



hosseinam1370
شنبه 03 مرداد 1394, 08:40 صبح
دوستان من با کد زیر می خام برای دو ستون محدودیت unique ایجاد کنم ، ولی نمی دونم با اینکه دستورش درسته ، این چرا فقط برای ستون lastName محدودیت قرار میده، و pId این محدودیت رو نداره.
مشکلش از کجاست؟


CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
)


133544

با تشکر.

SabaSabouhi
شنبه 03 مرداد 1394, 08:56 صبح
سلام
این کدی که شما نوشتی، برای مجموعه‌ای شامل دو ستون محدودیت ایجاد می‌کنه، اما تصور من اینه که
منظور شما اینه که هر کدوم از دو ستون به تنهایی unique باشن که کد شما برای این منظور صحیح نیست.
برای این کار باید دو فرمان constraint داشته باشی، هر کدوم برای هر یک از ستون‌های مورد نظر.
ضمن این که جدول شما کلید اصلی نداره. برای Id یک کلید اصلی تعریف کن که هم کلید اصلی باشه و هم
unique باشه.


CONSTRAINT [PK_Persons] PRIMARY KEY CLUSTERED ( [P_Id] ASC ),
CONSTRAINT [IX_Persons] UNIQUE NONCLUSTERED ( [LastName] ASC )

این دو سطر رو جایگزین constraint خودت کن، مشکلت حل می‌شه.

صبا صبوحی

hosseinam1370
شنبه 03 مرداد 1394, 09:39 صبح
ممنون مشکل حل شد. کدش :

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id) ,
CONSTRAINT uc1_PersonID UNIQUE (LastName)
)




این کدی که شما نوشتی، برای مجموعه‌ای شامل دو ستون محدودیت ایجاد می‌کنه

اینو نفهمیدم، اگه زحمتی نیست یکم توضیح بدید. یعنی کجاها استفاده میشه اون!!!


با تشکر./

SabaSabouhi
شنبه 03 مرداد 1394, 12:55 عصر
ممنون مشکل حل شد. کدش :

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id) ,
CONSTRAINT uc1_PersonID UNIQUE (LastName)
)





اینو نفهمیدم، اگه زحمتی نیست یکم توضیح بدید. یعنی کجاها استفاده میشه اون!!!


با تشکر./

سلام
این حالت که شما دو ستون رو با هم یکتا کنی، جاهای خاصی کاربر داره.
مثلاً فرض کنیم که شما فهرستی از قطعات یا کالا رو نگهداری می‌کنی. یک ستون داری به عنوان نوع کالا
و یک ستون به عنوان نام کالا.
هر کدام از این دو مولفه به تنهایی یکتا نیستن. مثلاً «شیر» یکتا نیست ( شیر میهن، شیر پاک، شیر دامداران و . . . )
و شرکت «میهن» هم یکتا نیست ( بستنی میهن، شیر شیر، خامه میهن و . . . )
اما «شیر»-«میهن» یکتا هست و نباید دو تا شیر میهن تو دیتابیس قابل تعریف باشه.
پس بجای این که «نوع کالا» که شیر یک از اون‌ها هست و نام شرکت که «میهن» هم یکی از اون‌ها هست رو یکتا کنیم
ترکیب دو ستون رو یکتا می‌کنیم.

ضمن این که کدی که نوشتی مشکلش اینه که جدولت کلید اصلی نداره. هر چند که Id رو یکتا کردی و اجازه‌ی null بودن
رو ازش گرفتی، اما بجای این کار اون رو به عنوان کلید اصلی تعریف کن.

صبا صبوحی