اسکیما (Schema) توصیف ساختار و قواعد داده است. در دیتابیس رابطه‌ای، تعریف جدول‌ها، ستون‌ها، نوع داده، Primary Key، Foreign Key و Constraint بخش‌های اسکیما هستند. اسکیما به SQL محدود نیست. JSON اسکیما قرارداد داده ورودی API را توصیف می‌کند و GraphQL اسکیما انواع و عملیات مجاز API را مشخص می‌کند.

مثال اسکیما در MySQL

CREATE TABLE orders (
    id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    customer_id BIGINT UNSIGNED NOT NULL,
    total DECIMAL(12,2) NOT NULL,
    status VARCHAR(32) NOT NULL,
    created_at TIMESTAMP NULL,
    INDEX idx_customer (customer_id)
);

تغییر اسکیما با مایگریشن لاراول

Schema::table('orders', function (Blueprint $table) {
    $table->string('tracking_code', 60)->nullable();
});

نمونه JSON اسکیما

{
  "type": "object",
  "required": ["product_id", "quantity"],
  "properties": {
    "product_id": {"type": "integer"},
    "quantity": {"type": "integer", "minimum": 1}
  }
}

اسکیما در GraphQL

type Product {
  id: ID!
  name: String!
  price: Int!
}
type Query { product(id: ID!): Product }

در تغییر اسکیما باید سازگاری نسخه‌های قبلی برنامه و داده موجود بررسی شود. ستون جدید با NOT NULL بدون مقدار پیش‌فرض ممکن است روی رکوردهای قدیمی خطا ایجاد کند.

ادامه مطالعه: مایگریشن، دیتابیس، زبان پرس‌وجوی گراف‌کیوال و نرمال‌سازی دیتابیس.