الرئيسية قاعدة المعرفة البرمجة والمنطق أساسيات قواعد البيانات للأنظمة الصناعية
البرمجة والمنطق

أساسيات قواعد البيانات للأنظمة الصناعية

لماذا تحتاج قاعدة بيانات في المصنع؟

تخيّل مصنعاً فيه 200 حساس، كل حساس يسجّل قراءة كل ثانية. هذا يعني 200 × 60 × 60 × 24 = أكثر من 17 مليون قراءة يومياً. أين تخزّنها؟ كيف تبحث فيها؟ كيف تجد أن المحرك رقم 7 ارتفعت حرارته يوم الخميس الساعة 3 فجراً؟

ملفات CSV ستنهار تحت هذا الحجم. تحتاج قاعدة بيانات (Database) — نظام متخصص في تخزين واسترجاع البيانات بسرعة وأمان.

أنواع قواعد البيانات الثلاثة

قواعد البيانات العلائقية (SQL)

تنظّم البيانات في جداول (Tables) مترابطة — تماماً مثل جداول Excel لكن بقوة أكبر بكثير. كل جدول له أعمدة محددة مسبقاً (Schema).

أمثلة: PostgreSQL, MySQL, SQLite, Microsoft SQL Server

-- إنشاء جدول الآلات
CREATE TABLE machines (
    id          INTEGER PRIMARY KEY,
    name        TEXT NOT NULL,
    type        TEXT NOT NULL,
    location    TEXT,
    max_temp    REAL DEFAULT 85.0,
    installed   DATE
);

-- إنشاء جدول قراءات الحساسات
CREATE TABLE sensor_readings (
    id          INTEGER PRIMARY KEY,
    machine_id  INTEGER REFERENCES machines(id),
    timestamp   TIMESTAMP NOT NULL,
    temperature REAL,
    vibration   REAL,
    pressure    REAL
);

-- إدخال بيانات
INSERT INTO machines (name, type, location, max_temp)
VALUES ('CNC-01', 'مخرطة', 'القاعة 3', 90.0);

-- استعلام: الآلات التي تجاوزت حرارتها 85 درجة اليوم
SELECT m.name, s.temperature, s.timestamp
FROM sensor_readings s
JOIN machines m ON s.machine_id = m.id
WHERE s.temperature > 85.0
  AND s.timestamp > CURRENT_DATE
ORDER BY s.temperature DESC;

نقاط القوة:

  • هيكل واضح ومحدد (Schema)
  • علاقات قوية بين الجداول (Foreign Keys)
  • لغة SQL موحدة ومعروفة
  • ضمان سلامة البيانات (ACID Transactions)

قواعد البيانات غير العلائقية (NoSQL)

تتعامل مع بيانات مرنة لا تتبع هيكلاً ثابتاً — مثل سجلات الأحداث حيث كل حدث قد يحمل بيانات مختلفة.

أنواعها:

النوع الوصف مثال
Document مستندات JSON مرنة MongoDB, CouchDB
Key-Value مفتاح وقيمة بسيطة Redis, DynamoDB
Graph عُقد وعلاقات Neo4j, SurrealDB
Wide-Column أعمدة ديناميكية Cassandra, ScyllaDB
// مثال: مستند MongoDB لحدث صناعي
{
    "_id": "evt_20240315_001",
    "machine_id": "CNC-01",
    "timestamp": "2024-03-15T14:30:05Z",
    "event_type": "alarm",
    "severity": "high",
    "data": {
        "temperature": 92.3,
        "threshold": 85.0,
        "action_taken": "speed_reduced",
        "operator": "أحمد محمد"
    },
    "tags": ["حرارة", "تجاوز", "خط_CNC"]
}

نقاط القوة:

  • مرونة في الهيكل — لا تحتاج Schema مسبقاً
  • تعامل ممتاز مع البيانات المتداخلة (nested)
  • تتوسع أفقياً بسهولة (horizontal scaling)
  • سرعة كتابة عالية

قواعد بيانات السلاسل الزمنية (Time-Series)

مصمّمة خصيصاً لبيانات تتغير مع الزمن — وهذا بالضبط ما تنتجه الحساسات. محسّنة لكتابة كميات هائلة من البيانات المختومة بالزمن.

أمثلة: InfluxDB, TimescaleDB, QuestDB

-- مثال InfluxDB: كتابة قراءة حساس
INSERT sensor_data,machine=CNC-01,location=hall3
    temperature=78.5,vibration=2.3,pressure=145.0
    1710500000000000000

-- استعلام: متوسط الحرارة كل 5 دقائق لآخر ساعة
SELECT MEAN(temperature)
FROM sensor_data
WHERE machine = 'CNC-01'
  AND time > now() - 1h
GROUP BY time(5m)

نقاط القوة:

  • سرعة كتابة فائقة (ملايين النقاط في الثانية)
  • ضغط بيانات ممتاز (توفير 90%+ من المساحة)
  • استعلامات زمنية مدمجة (تجميع بالساعة/اليوم/الشهر)
  • حذف تلقائي للبيانات القديمة (retention policies)

مقارنة شاملة

المعيار SQL NoSQL Time-Series
الهيكل ثابت (Schema) مرن ثابت مع طابع زمني
أفضل استخدام بيانات مهيكلة ومترابطة بيانات متنوعة ومرنة بيانات حساسات وقياسات
سرعة الكتابة جيدة ممتازة فائقة
الاستعلامات SQL كامل حسب النوع استعلامات زمنية
مثال صناعي إدارة الآلات والطلبات سجلات الأحداث قراءات الحساسات
التوسع عمودي (vertical) أفقي (horizontal) أفقي

الفهارس (Indexes): تسريع البحث

بدون فهرس، قاعدة البيانات تفحص كل صف للعثور على ما تبحث عنه. الفهرس يعمل مثل فهرس الكتاب — يُوجّهك مباشرة للمكان الصحيح.

-- بدون فهرس: يفحص كل القراءات (بطيء جداً مع الملايين)
SELECT * FROM sensor_readings
WHERE machine_id = 5 AND timestamp > '2024-03-15';

-- إنشاء فهرس مركّب
CREATE INDEX idx_machine_time
ON sensor_readings (machine_id, timestamp);

-- نفس الاستعلام الآن أسرع بمئات المرات

متى تنشئ فهرساً؟

  • الأعمدة التي تبحث فيها كثيراً (WHERE)
  • الأعمدة التي ترتّب بها (ORDER BY)
  • الأعمدة المستخدمة في الربط (JOIN)

تحذير: كل فهرس يبطّئ عمليات الكتابة قليلاً — لا تبالغ في عددها.

SurrealDB: قاعدة بيانات الجيل الجديد

SurrealDB قاعدة بيانات حديثة تجمع مميزات SQL و NoSQL و Graph في نظام واحد. تدعم الجداول والمستندات والعلاقات البيانية والاستعلامات في الزمن الحقيقي.

-- SurrealQL: تعريف جدول مع قيود
DEFINE TABLE machine SCHEMAFULL;
DEFINE FIELD name ON machine TYPE string;
DEFINE FIELD machine_type ON machine TYPE string;
DEFINE FIELD location ON machine TYPE string;
DEFINE FIELD max_temp ON machine TYPE float DEFAULT 85.0;
DEFINE FIELD installed ON machine TYPE datetime;

-- إنشاء سجل
CREATE machine SET
    name = 'CNC-01',
    machine_type = 'مخرطة',
    location = 'القاعة 3',
    max_temp = 90.0,
    installed = '2023-06-15T00:00:00Z';

-- علاقات بيانية: الآلة تقع في قسم
RELATE machine:cnc01 -> located_in -> department:machining;

-- استعلام مع العلاقات
SELECT name, ->located_in->department.name AS dept
FROM machine
WHERE max_temp > 85.0;

مميزات SurrealDB للصناعة:

  • Multi-model: علائقية + مستندات + بيانية في نظام واحد
  • Real-time: اشتراكات مباشرة للتغييرات (Live Queries)
  • Permissions: صلاحيات دقيقة على مستوى الحقل
  • Embedded + Server: يعمل مدمجاً في التطبيق أو كخادم مستقل

تصميم قاعدة بيانات لمصنع: مثال عملي

-- الآلات
CREATE TABLE machines (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50) UNIQUE,
    type VARCHAR(30),
    department VARCHAR(30),
    max_temp REAL,
    max_vibration REAL,
    status VARCHAR(20) DEFAULT 'active'
);

-- قراءات الحساسات (مُقسّمة حسب الشهر للأداء)
CREATE TABLE readings_2024_03 (
    machine_id INTEGER REFERENCES machines(id),
    ts TIMESTAMP NOT NULL,
    temp REAL,
    vibration REAL,
    pressure REAL
);
CREATE INDEX idx_readings_machine_ts
ON readings_2024_03 (machine_id, ts);

-- سجل الإنذارات
CREATE TABLE alarms (
    id SERIAL PRIMARY KEY,
    machine_id INTEGER REFERENCES machines(id),
    triggered_at TIMESTAMP DEFAULT NOW(),
    severity VARCHAR(10),  -- low, medium, high, critical
    parameter VARCHAR(20), -- temperature, vibration, pressure
    value REAL,
    threshold REAL,
    acknowledged BOOLEAN DEFAULT FALSE,
    acknowledged_by VARCHAR(50)
);

-- استعلام: ملخص إنذارات الأسبوع لكل آلة
SELECT
    m.name,
    COUNT(*) AS total_alarms,
    COUNT(*) FILTER (WHERE a.severity = 'critical') AS critical,
    MAX(a.value) AS worst_reading
FROM alarms a
JOIN machines m ON a.machine_id = m.id
WHERE a.triggered_at > NOW() - INTERVAL '7 days'
GROUP BY m.name
ORDER BY critical DESC, total_alarms DESC;

كيف تختار قاعدة البيانات المناسبة؟

السؤال الإجابة الاختيار
بياناتك منظّمة ومترابطة؟ نعم SQL (PostgreSQL)
بياناتك مرنة ومتنوعة الهيكل؟ نعم NoSQL (MongoDB)
بياناتك حساسات مع طوابع زمنية؟ نعم Time-Series (InfluxDB)
تحتاج كل شيء في نظام واحد؟ نعم SurrealDB
تحتاج تخزين مؤقت سريع جداً؟ نعم Redis (Key-Value)

في الواقع، معظم المصانع الذكية تستخدم أكثر من نوع — قاعدة علائقية لإدارة الآلات والطلبات، وقاعدة زمنية لبيانات الحساسات. المهم أن تختار بناءً على طبيعة بياناتك لا على ما هو شائع.

database SQL NoSQL time-series SurrealDB query قواعد البيانات الاستعلام السلاسل الزمنية الجداول العلائقية التخزين الفهرسة