محدد القيمة الفريدة UNIQUE Constraint يضمن هذا المحدد ان تكون جميع القيم في الحقل فريدة اي سوف لا يسمح بتكرار نفس القيمة في هذا الحقل في الاسطر المختلفة. مثلا في جدول الزبائن يمكن ان نضيف محدد القيمة الفريدة الى حقل معرف الزبون CUSTOMER_ID
حيث ان هذا الحقل يجب ان يمتلك قيمة فريدة لكل زبون وغير متكررة اي سوف يكون مثل اي وثيقة هوية او جواز سفر يمتلكها الشخص حيث تكون هذه الوثائق ذات ارقام فريدة وغير قابلة للتكرار لذلك بأستخدام هذه الوثائق يمكن التعرف على الاشخاص بسهولة نفس الشيء في جدول الزبائن سوف يكون حقل يكون حقل CUTSOMER_ID معرف الزبون هو مثل وثيقة الهوية او جواز السفر يمتلك قيمة فريد وغير متكررة لكل زبون مثلا اذا كانت القيمة هيه ID0001 فهي تشتيرالى الزبون الاول (Name Ahmed Ali) والقيمة ID0002 تشتير الزبون الى الزبون الثاني (Name Mohammed Omer).
لكي نعرف محدد القيمة الفريدة UNIQUE Constraint اثناء تكوين الجدول سوف نستخم الكلمة UNIQUE ويمكن ان ضعها بعد نوع البيانات في الحقل او بعد معرف القيمة الخالية كما في المثال التالي:
CREATE TABLE CUSTOMER ( CUTSOMER_ID VARCHAR (10) NOT NULL UNIQUE, CUTSOMER_NAME VARCHAR (200) NOT NULL, CUTSOMER_AGE INT, CUTSOMER_ADDRESS VARCHAR (3000) );
الان وبعد تكوين الجدول اذا حاولنا ان ننفذ عملية ادخال البيانات التالية بأستخدام عبارة INSERT سوف نحصل على رسالة الخطاء التالية و السبب في رسالة الخطاء هو اننا حاولنا ان نستخدم نفس قيمة معرف الزبون (ID0001) في عبارتي INSERT فمالذي حصل ؟ اولا قام SQL Server بنتفيذ عبارة INSERT الاولى وكما نلاحظ في رسالة الخطاء اول سطر كان يحتوي على عبارة ((1 row(s) affected)) وهذا يعني ان عبارة INSERT الاولى تم تنفيذها بنجاح. عندما انتقل SQL Server الى تنفيذ عبارة INSERT الثانية حصل الخطاء حيث حاول النظام ان يدخل نفس القيمة (ID0001) ولكن في سطر ثاني وبسبب محدد القيمة الفريدة فأن SQL Server لم يتمكن من اتمام عبارة INSERT الثانية بنجاح ورسالة الخطاء كانت واضحة وهي بسبب انتهاك محدد القيمة الخالية (Violation of UNIQUE KEY constraint) .
INSERT INTO [CUSTOMERS] ([CUTSOMER_ID] ,[CUTSOMER_NAME],[CUTSOMER_AGE] ,[CUTSOMER_ADDRESS]) VALUES ('ID0001','Ahmed Ali',23,'Iraq Baghdad') INSERT INTO [CUSTOMERS] ([CUTSOMER_ID] ,[CUTSOMER_NAME],[CUTSOMER_AGE] ,[CUTSOMER_ADDRESS]) VALUES ('ID0001','Mohammed Omer',33,'UAE Abu Dhabi')
(1 row(s) affected) Msg 2627, Level 14, State 1, Line 25 Violation of UNIQUE KEY constraint 'UQ__CUSTOMER__6E4B81E6BFB2AF26'. Cannot insert duplicate key in object 'dbo.CUSTOMERS'. The duplicate key value is (ID0001). The statement has been terminated.
لتنفيذ كلا العبارتين بشكل صحيح يجب ان نستخدم قيمة فريدة في حقل معرف الزبون لذلك غيرنا عبارة INSERT الثانية واستخدمنا القيمة (ID0001) وبتالي تمكنا من تنفيذ كلا العبارتين بشكل صحيح.
INSERT INTO [CUSTOMERS] ([CUTSOMER_ID] ,[CUTSOMER_NAME],[CUTSOMER_AGE] ,[CUTSOMER_ADDRESS]) VALUES ('ID0001','Ahmed Ali',23,'Iraq Baghdad') INSERT INTO [CUSTOMERS] ([CUTSOMER_ID] ,[CUTSOMER_NAME],[CUTSOMER_AGE] ,[CUTSOMER_ADDRESS]) VALUES ('ID0002','Mohammed Omer',33,'UAE Abu Dhabi')
اضافة محدد القيمة الفريدة UNIQUE Constraint لاكثر من حقل:
يمكن اضافة محدد القيمة الفريدة UNIQUE Constraint لاكثر من حقل واحد في نفس الجدول حيث لا تحديد لعدد محددات القيمة الفريدة UNIQUE Constraint ولكن يجب استخدامها فقط مع الحقول التي تحتاج الى هذه القاعدة.
مثلا من غير المناسب استخدام هذا المحدد مع حقل المدينة لانه من المنطقي ان تمتلك اكثر من زبون من نفس المدينه وبتالي سوف يحتوي جدول الزبائن على اسطر تمتلك نفس القيمة في حقل المدينة.
في المثال التالي سوف نكون جدول زبائن جديد ونستخدم محدد القيمة الفريدة UNIQUE Constraint مع حقلي معرف الزبون CUTSOMER_ID وحقل رقم الهاتف CUTSOMER_MOB وبشكل منفصل
CREATE TABLE CUSTOMER ( CUTSOMER_ID VARCHAR (10) NOT NULL UNIQUE, CUTSOMER_NAME VARCHAR (200) NOT NULL, CUTSOMER_AGE INT, CUTSOMER_ADDRESS VARCHAR (3000), CUSTOMER_MOB VARCHAR (30) UNIQUE );
ويمكن القيام بذلك بطريقة اخرى حيث نستطيع ان نكون محدد قيمة فريدة واحد ولكن يحتوي على حقلين كما في المثال التالي حيث قمنا بتكوين معرف للقيمة الفريدة في نهاية الجدول واستخدمنا حلقين هما رقم الجوال وصندوق البريد وبتالي فأن SQL Server سوف لايسمح بأستخدام نفس رقم الموبايل وصندوق البريد لاكثر من زبون
CREATE TABLE [CUSTOMERS] ( CUTSOMER_ID VARCHAR (10) NOT NULL UNIQUE, CUTSOMER_NAME VARCHAR (200) NOT NULL, CUTSOMER_AGE INT, CUTSOMER_ADDRESS VARCHAR (3000), CUSTOMER_MOB VARCHAR (30), CUSTOMER_BOX VARCHAR (30) CONSTRAINT CUSID_MOB UNIQUE (CUSTOMER_BOX,CUSTOMER_MOB) );
اضافة محدد القيمة الفريدة UNIQUE Constraint لجدول موجود:
في الامثلة السابقة وضحنا كيفية اضافة محدد القيمة الفريدة UNIQUE عند تكوين الجداول ولكن اذا اردنا اضافة هذا المحدد الى جدول موجود سوف نستخدم الايعاز ALTER TABLE كما في المثال التالي
ALTER TABLE [CUSTOMERS] ADD UNIQUE (CUTSOMER_ID)
وفي المثال التالي اضفنا محدد قيمة فريدة يتكون من حقلين حقل الموبايل وصندوق البريد
ALTER TABLE [CUSTOMERS] ADD CONSTRAINT CUSID_MOB UNIQUE (CUSTOMER_BOX,CUSTOMER_MOB)
طبعا في كلا المثالين السابقين من المحمتمل ان نواجه مشاكل خصوصا اذا كانت الحقول التي نريد ان نضيف اليها محدد القيمة الفريدة تمتلك قيم متكررة لذلك يجب ان نخطط لذلك بشكل جيد ونحاول ان نجد الحلول المناسبة قبل القيام بهذه الخطوة
ليست هناك تعليقات:
إرسال تعليق