في SQL، بتستخدم CREATE TYPE علشان تعرف نوع بيانات جديد. ده بيكون مفيد لما تحتاج تعرف أنواع بيانات مخصصة زي الـ ENUM أو الـ composite types أو حتى table types، واللي ممكن تخليك تعرّف بنية معقدة تناسب احتياجات التطبيق بتاعك.
1. إنشاء Enum Type
الـ ENUM هو نوع بيانات بيحدد مجموعة ثابتة من القيم، وكل قيمة في المجموعة لازم تكون واحدة من القيم المحددة مسبقًا.
مثال:
CREATE TYPE status_type AS ENUM ('active', 'inactive', 'pending');
ده هيخلق نوع بيانات مخصص اسمه status_type
بقيم active
، inactive
، و pending
. وبتقدر تستخدمه في تعريف الجداول كده:
CREATE TABLE users (
user_id SERIAL PRIMARY KEY,
username VARCHAR(50),
status status_type
);
2. إنشاء Composite Type
الـ Composite Type هو نوع بيانات مخصص بيجمع أكتر من قيمة مع بعض زي صف في جدول لكن مش مرتبط مباشرة بجدول.
مثال:
CREATE TYPE address_type AS (
street VARCHAR(100),
city VARCHAR(50),
zip_code VARCHAR(10)
);
ده هيخلق نوع بيانات مخصص اسمه address_type
بيحتوي على 3 خصائص: street
، city
، و zip_code
. وبتقدر تستخدمه كده:
CREATE TABLE employees (
employee_id SERIAL PRIMARY KEY,
name VARCHAR(100),
address address_type
);
3. إنشاء Range Type
الـ Range Type هو نوع بيانات مخصص بيمثل مجموعة من القيم، زي رينج من الأرقام أو التواريخ.
مثال:
CREATE TYPE int_range AS RANGE (
subtype = integer
);
ده هيخلق نوع بيانات مخصص اسمه int_range
لتمثيل مجموعة من الأرقام الصحيحة. وبتقدر تستخدمه كده:
CREATE TABLE projects (
project_id SERIAL PRIMARY KEY,
project_name VARCHAR(100),
budget int_range
);
4. إنشاء Table Type
في بعض أنظمة إدارة قواعد البيانات زي SQL Server، ممكن كمان تعرف table type علشان تستخدمه في تمرير جدول كـ باراميتر داخل stored procedures أو functions.
مثال في SQL Server:
CREATE TYPE employee_table_type AS TABLE (
employee_id INT,
name VARCHAR(100),
department VARCHAR(50)
);
وتقدر تستخدم النوع ده في الـ stored procedures زي كده:
CREATE PROCEDURE insert_employees (@employees employee_table_type)
AS
BEGIN
INSERT INTO employees (employee_id, name, department)
SELECT employee_id, name, department FROM @employees;
END;
5. تعديل نوع بيانات
بعد ما تعرف نوع البيانات، ممكن تعدله باستخدام ALTER TYPE حسب النظام اللي بتستخدمه. مثلا، ممكن تضيف قيم جديدة للـ ENUM أو تعدل في تعريف الـ composite type.
ALTER TYPE status_type ADD VALUE 'archived';
6. حذف نوع بيانات
علشان تحذف نوع بيانات مخصص، تقدر تستخدم DROP TYPE:
DROP TYPE status_type;
ملخص
- الـCREATE TYPE بتساعدك تعرف أنواع بيانات مخصصة زي ENUM و composite types و ranges.
- الأنواع دي بتستخدم في تعريف الجداول والـ functions علشان تسهل عليك تنظيم البيانات وتخلي الكود بتاعك أوضح وأبسط.