اذهب إلى المحتوى

البيانات في SQL: أنواعها والقيود عليها


إبراهيم البحيصي

تعرفنا في المقالات السابقة على مفهوم قواعد البيانات، وعرضنا مقدمة عن لغة الاستعلام البنائية SQL وأنواع الجمل فيها، وتعرفنا أيضا على كيفية بناء الجدول في قاعدة البيانات والتعديل على هيكله.

سنتطرق في هذا المقال إلى مفهوم القيود الموجودة في قواعد البيانات، وسنتكلم عن أنواع البيانات التي يمكن استخدامها.

أنواع البيانات Data Types في قاعدة البيانات

يُحدّد نوع البيانات طبيعة وشكل القيمة التي من الممكن أن يأخذها العمود في الجدول، ويجب علينا أن نحدد اسم العمود ونوع بياناته عند إنشاء هذا الجدول وذلك في جملة إنشائه.

توجد أنواع بيانات معيارية حدّدتها مؤسسة ANSI، ولكن ليس كل أنظمة إدارة قواعد البيانات توفر هذه المعايير وتطبقها على نحو كامل. يلخص الجدول التالي أهم وأشهر الأنواع المستخدمة

01_datatypes.png

هناك أنواع معيارية أخرى مثل XML، ARRAY، MULTISET ولكنها غير متداولة على نطاق واسع، ويجب الانتباه إلى أن نظم إدارة قواعد البيانات تختلف في تسمية وتعريف بعض أنواع البيانات، فمثلاً، نوع البيانات الرقم يسمى في قواعد بيانات أوراكل بـ Number ولكن في قواعد البيانات MySQL وPostgreSQL يسمى Int أو Integer.

القيود

يعدّ موضوع القيود من المواضيع الهامة جدا في قواعد البيانات، ويجب على المبرمج ومسؤول قواعد البيانات الإلمام بأنواع القيود وكيفية تعريفها والتعامل معها.

الهدف العام من القيود هو الحفاظ على سلامة البيانات Data integrity ودقتها. نستطيع أن نُعرّف القيد على أنه شرط يحكم العمود أو الجدول ويُتأكد من الالتزام بهذا الشرطعند إجراء عمليات مثل الإضافة والتعديل والحذف (على سبيل الذكر لا الحصر)، وفي حال لم يُحترَم الشرط فإن العملية مصدر الأمر تُرفَض ويوقَف تنفيذها ويُتراجع عن أي أثر أحدثته.

مجال القيود

تُطبَّق القيود على مستويين:

  • مستوى العمود: يُعَرَّف القيد ضمن تعريف العمود ويطبق القيد على مستوى هذا العمود فقط.
  • مستوى الجدول: يُعَرَّف القيد منفصلا عن أي عمود (عادة في نهاية تعريف الجدول)، ويمكن أن يطبق القيد على واحد أو أكثر من الأعمدة.

أنواع القيود

  • قيد “العمود غير الفارغ” Not Null Constraint: نستطيع إعطاء قيمة فارغة لعمود ما لم نُعرف هذا القيد عليه، والذي نقصد به منع إدخال أو إعطاء العمود قيمة فارغة Null عند إجراء عمليات مثل الإضافة أو التعديل على السجلات. يعرف المثال التالي جدولًا Persons مع تطبيق قيد العمود غير الفارغ على أول ثلاث أعمدة (طبقنا المثال على MySQL 5.7 وOracle XE):

    CREATE TABLE Persons (
        ID int NOT NULL,
        LastName varchar(255) NOT NULL,
        FirstName varchar(255) NOT NULL,
        Age int
    );
  • قيد القيمة الفريدة UNIQUE Constraint: مهمة هذا القيد هي ضمان عدم تكرار قيمة عمود في أي من سجلات الجدول، بحيث تكون هذه القيمة فريدة ومختلفة. نستطيع تعريف أكثر من قيد فريد في الجدول على أكثر من عمود، كما أن قيد المفتاح الرئيسي (انظر بالأسفل) يقدم ضمان القيمة الفريدة للعمود بجانب القيد الفريد. يُعرَّف القيد الفريد بالطريقة التالية:

    CREATE TABLE Persons (
        ID int NOT NULL UNIQUE,
        LastName varchar(255) NOT NULL,
        FirstName varchar(255) NOT NULL,
        Age int
    );

    أو

    CREATE TABLE Persons (
        ID int NOT NULL,
        LastName varchar(255) NOT NULL,
        FirstName varchar(255),
        Age int,
        UNIQUE (ID)
    );

    وفي حال أردنا أن نعرف القيد على مستوى أكثر من عمود:

    CREATE TABLE Persons (
        ID int NOT NULL,
        LastName varchar(255) NOT NULL,
        FirstName varchar(255),
        Age int,
        CONSTRAINT UC_Person UNIQUE (ID,LastName)
    );
  • قيد المفتاح الرئيسي Primary Key Constraint: يُطبَّق هذا القيد على عمود أو أكثر بحيث تكون قيمة العمود أو قيمة الأعمدة مجتمعة تُعَرِّف كل سجل على نحو فريد عن السجلات الأخرى في الجدول. يُعدّ قيد المفتاح الرئيسي قيدًا فريدًا أضيف إليه قيد غير فارغ.
    خصائص قيد المفتاح الرئيسي:

    • يمكن تعريف قيد مفتاح رئيسي واحد على مستوى الجدول.
    • لا يمكن تعريف قيد المفتاح الرئيسي على أعمدة من نوع BLOB،CLOB،NCLOB،ARRAY.
    • قيم العمود المطبق عليه قيد المفتاح الرئيسي لابد أن تكون فريدة لكل سجل وألا تأخذ قيمة فارغة.
    • تُعَرف قيود المفتاح الأجنبي بأخذها مَرجِعاً من مفتاح قيد رئيسي في جدول آخر، وذلك لبناء علاقة بين جدولين.
      يُعرَّف قيد المفتاح الرئيسي كالتالي:
    CREATE TABLE Persons (
        ID int PRIMARY KEY,
        LastName varchar(255) NOT NULL,
        FirstName varchar(255),
        Age int
    );

    أو

    CREATE TABLE Persons (
        ID int ,
        LastName varchar(255) NOT NULL,
        FirstName varchar(255),
        Age int,
        PRIMARY KEY (ID)
    );

    نعرّف في ما يلي قيد مفتاح رئيسي على أكثر من عمود ونعطيه الاسم PK_Person:

    CREATE TABLE Persons (
        ID int ,
        LastName varchar(255) NOT NULL,
        FirstName varchar(255),
        Age int,
        CONSTRAINT PK_Person PRIMARY KEY (ID,LastName)
    );
  • قيد المفتاح الأجنبي Foreign Key Constraint: يعرّف قيد المفتاح الأجنبي عمودًا - أو أكثر - في الجدول على أنه مرجع من عمود يوجد في جدول آخر، بحيث تكون قيمة العمود مأخوذة من هذا العمود المرجعي بشرط أن يُعرَّف عليه قيد فريد أو قيد مفتاح رئيسي (في الجدول الآخر).
    يعدّ هذا القيد وسيلة لربط جداول قاعدة البيانات وبناء علاقات بينها، ومن الممكن تعريف أكثر من قيد أجنبي في الجدول الواحد. نستطيع أن نعرف القيد الأجنبي في الجدول كالتالي:

    CREATE TABLE Orders (
        OrderID int NOT NULL,
        OrderNumber int NOT NULL,
        PersonID int,
        PRIMARY KEY (OrderID),
        FOREIGN KEY (PersonID) REFERENCES Persons(ID)
    );

    لإعطاء القيد الأجنبي اسما مخصَّصا نستخدم الطريقة التالية:

    CREATE TABLE Orders (
        OrderID int NOT NULL,
        OrderNumber int NOT NULL,
        PersonID int,
        PRIMARY KEY (OrderID),
        CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
        REFERENCES Persons(ID)
    );

إن أردت الاستزادة، فارجع إلى توثيق أنواع البيانات في لغة SQL من موسوعة حسوب.


تفاعل الأعضاء

أفضل التعليقات

بارك الله فيك لقد استفدت كثيرا من هذا الموضوع منظم و امثلة ممتازة و تسلسل في الطرح

اردت ان اضيف اضافة لموضوعك اخي

قيد القيمة الافتراضية DEFAULT Constraint:

لغاية من هذه الخاصية هي تحديد قيمة افتراضية للحقل المطبقة عليه تفاديا للفراغ  ،NULLوطبعا هذه القيمة الافتراضية لا تحفظ إلا إذا ترك المستخدم قيمة الحقل فارغة، ولتطبيق هذه الخاصية على حقل معين فالصيغة كما يلي

CREATE TABLE MyTable(

MyColumn nvarchar(25) DEFAULT 'UnKnown')

);

قيد الزيادة التلقائية IDENTITY Constraint: 

هذا النوع من الكلمات يطبق فقط على الحقول التي يكون نوعها رقميا من أجل جعل قيمها تزداد تلقائيا عند إضافة أي سطر جديد، مثلا لو أنشأت الجدول التالي وطبقت هذه الكلمة على الحقل  ،IDفسوف تزداد قيمته تصاعديا 

CREATE TABLE MyTable (
    ID INT IDENTITY(1,1),
    FullName VARCHAR(60)
) ;

عند إضافة أي سطر جديد، ستلاحظ بأن خانة الحقل  IDتمنع من الكتابة فيها، ولكن بمجرد ما تجاوزها تقوم برفع قيمة الحقل بواحد تلقائيا،

تستطيع تغيير القيمة التي يبدأ منها الحقل، وأيضا معامل زيادة القيمة هكذا:

CREATE TABLE MyTable (

   ID INT IDENTITY(2,3)

);

في هذا المثال، ستبدأ قيمة الحقل من الرقم  ،2ويكون معامل الزيادة هو  ،3أي أن القيمة الأولى ستكون  ،2والقيمة الثانية ستكون  ،5والثالثة ستكون ... 8إلخ

ملاحظة الخاصية السابقة في SQL Server .  و للكن في MySQL  هي AUTO INCREMENT

حذف قيود الاعمدة :

لحذف خاصيات الإدخال، نكتب الصيغة التالية:

ALTER TABLE Person DROP CONSTRAINT C_Constraint

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...