SQL تخزين قيم موحدة في العمود
- مفهوم القيم الموحدة
- الكلمة UNIQUE
- إنشاء عمود لا يقبل قيم مكررة
- تجربة إدخال قيم متكررة في عمود نوعه UNIQUE
مفهوم القيم الموحدة
عندما تحاول إنشاء حساب جديد في أي موقع إلكتروني, تلاحظ في بعض الأحيان أنه يطلب منك إدخال معلومات لم يدخلها أحد غيرك من قبل.
فمثلاً, عندما يطلب منك إدخال إسم المستخدم ( Username ) قد تجده يخبرك بأن الإسم الذي أدخلته غير متاح.
أيضاً, إذا كنت تملك حساب في موقع ما و حاولت إنشاء حساب آخر في نفس الموقع و باستخدام نفس البريد الإلكتروني ستجد الموقع لا يسمح لك بذلك.
إذا حاولت إنشاء حساب جديد في موقع هرمش و قمت بإدخال mhamad
كإسم المستخدم, سيظهر لك أنه لا يمكنك استخدام هذا الإسم كالتالي.
إذاً عندما أدخلنا هذا الإسم, قام المدونة بالبحث في قاعدة البيانات الخاصة بها عن إسم المستخدم الذي أدخلناه.
بما أنها وجدت مستخدم آخر يملك نفس إسم المستخدم الذي أدخلناه أخبرتنا أنه لا يمكننا إستخدام هذا الإسم, و لهذا تريدنا أن ندخل إسم آخر.
فوائدة القيم الموحدة في التطبيقات و المواقع
في الأمثلة التي ذكرناها سابقاً, الفائدة من جعل إسم المستخدم الموحد قد يكون لها فوائد عديدة و نذكر منها:
- يمكنك تسجيل الدخول به.
- يمكنك البحث عن أي مستخدم من خلال إسم المستخدم الخاص به.
- يمكنك الإبلاغ عن أي مستخدم من خلال إسم المستخدم الخاص به.
- في مواقع التواصل الإجتماعي مثل تويتر و فيسبوك, يمكنك أن تشير لأي حساب ( أي تفعل له Mention ) من خلال وضع الرمز
@
و من ثم ذكر إسم المستخدم.
القيم الموحدة مفيدة جداً في قواعد البيانات حيث لاحظنا في دروس سابقة أن إعطاء رقم تعرفة موحد id
لكل سطر في الجدول يتيح لنا إمكانية الوصول إليه بكل سهولة. و في الدروس الاحقة ستلاحظ أهمية القيم الموحدة في إنشاء علاقات بين الجداول التي ننشئها في نفس قاعدة البيانات.
الكلمة UNIQUE
في حال أردت جعل العمود لا يقبل أن يتم تخزين نفس القيمة فيه أكثر من مرة يمكنك إضافة الخاصية UNIQUE إلى نوع العمود.
الآن, عليك معرفة أن طريقة استخدام هذه الكلمة تختلف من قاعدة بيانات لأخرى و لكنها تستخدم لنفس الغرض.
ملاحظة: في الأمثلة التي وضعناها في هذا الدرس, إعتمدنا أسلوب قواعد بيانات MySQL لأنها القاعدة التي نتعامل معها منذ بداية الدورة.
في قواعد بيانات MySQL
لإنشاء عمود لا يقبل أن يتم تخزين نفس القيمة فيه أكثر من مرة نضيف الخاصية UNIQUE كالتالي.
بين أقواس الكلمة UNIQUE نكتب إسم العمود الذي نريده أن لا يحتوي على أي قيم مكررة.
في قواعد بيانات Access / SQL Server / Oracle
لإنشاء عمود لا يقبل أن يتم تخزين نفس القيمة فيه أكثر من مرة نضيف الخاصية UNIQUE كالتالي.
إنشاء عمود لا يقبل قيم مكررة
قم بتنفيذ الإستعلام التالي حتى تنشئ قاعدة بيانات جديدة إسمها harmash
و تنشئ فيها جدول إسمه users
يحتوي على بيانات 5 مستخدمين.
ملاحظة: قمنا بإضافة الخاصية UNIQUE إلى العمود username
لأننا لا نريد أن يكون هناك مستخدمين عندهم نفس إسم المستخدم.
الإستعلام
بعد تنفيذ الإستعلام السابق في phpMyAdmin سيتم إنشاء قاعدة البيانات harmash
و إنشاء الجدول users
بداخلها.
قم بالنقر على إسم قاعدة البيانات harmash
من القائمة اليسرى حتى تبدأ بالتعامل معها و تطبيق ما ستتعلمه في هذا الدرس.
البيانات التي قمنا بإضافتها بشكل إفتراضي في الجدول users
.
id | first_name | last_name | username |
---|---|---|---|
1 | Ahmad | Alhazem | ahmad |
2 | Rami | Algharib | rami |
3 | Said | Alnaja | said |
4 | Noura | Jamali | noura |
5 | Amani | Sarrouf | amani |
تجربة إدخال قيم متكررة في عمود نوعه UNIQUE
الإستعلام التالي يحاول إضافة مستخدم جديد و إعطائه إسم مستخدم يملكه شخص آخر.
الإستعلام
عند تنفيذ الإستعلام سيظهر الخطأ التالي.
معنى هذا الخطأ أنه يوجد في الأساس مستخدم عنده username
يساوي 'ahmad'
لهذا لا يمكن إضافة المستخدم الجديد.
لإضافة المستخدم السابق, ستكون مجبر على تغيير إسم المستخدم سواء تغييره بالكامل أو التعديل عليه.
الإستعلام التالي يضيف المستخدم السابق و يعرض كل بيانات المستخدمين الموجودين في الجدول.
ما فعلناه لحل مشكلة Duplicate entry هو تغيير قيمة الحقل username
إلى 'ahmad2020'
لأنه لا يوجد مستخدم آخر يملك نفس هذه القيمة.
الإستعلام
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
id | first_name | last_name | username |
---|---|---|---|
1 | Ahmad | Alhazem | ahmad |
2 | Rami | Algharib | rami |
3 | Said | Alnaja | said |
4 | Noura | Jamali | noura |
5 | Amani | Sarrouf | amani |
6 | Ahmad | Harmush | ahmad2020 |