الانتقال إلى المحتوى الرئيسي
طبقة البيانات في تطبيق Twenty هي البيانات التي يضيفها تطبيقك إلى مساحة العمل — أنواع السجلات الجديدة التي يصرّح عنها، والأعمدة التي يضيفها إلى الكائنات الموجودة، وكيف ترتبط هذه السجلات ببعضها البعض.

في هذا القسم

كائنات

defineObject — صرّح عن أنواع سجلات جديدة مع حقولها الخاصة.

توسيع الكائنات

defineField — أضِف حقولًا إلى كائنات قياسية أو كائنات تطبيقات أخرى.

العلاقات

اتصالات ثنائية الاتجاه من نوع MANY_TO_ONE / ONE_TO_MANY بين الكائنات.

الكيانات بنظرة سريعة

يكتشف SDK هذه العناصر عبر تحليل AST أثناء وقت البناء، لذا تنظيم الملفات يعود إليك — القاعدة المتّبعة هي src/objects/ و src/fields/ و src/indexes/. معرّفات UUID ثابتة من نوع universalIdentifier تربط كل شيء معًا عبر عمليات النشر.

الفهارس (اختياري)

يمكن للتطبيقات إرفاق الفهارس مع الكائنات الخاصة بها للحفاظ على سرعة الاستعلامات المتكررة. أكثر الحالات شيوعًا هي عمود حالة أو مفتاح أجنبي تقوم بقراءته بشكل متكرر.
src/indexes/post-card-status.index.ts

الفهارس الفريدة

تقبل defineIndex الخيار isUnique: true لكلٍّ من التفرد على عمود واحد أو على عدّة أعمدة. هذه هي البنية الموصى بها — إن defineField({ isUnique: true }) مهملة وسيتم إزالتها في إصدار قادم.

قيود أخرى

  • تظل عبارات WHERE الجزئية تحت تحكم المشرف — لا يمكن للتطبيقات التصريح بها.
  • يتم تقييد كل كائن بعدد 10 فهارس مخصصة (لا تُحتسب فهارس الإطار نفسه).
رتّب مصفوفة fields بالطريقة التي ينبغي على Postgres استخدامها — العمود في أقصى اليسار أولًا، مثل دليل الهاتف. الفهارس ليست مجانية: كل عملية كتابة في الجدول تقوم بتحديثها. أضِف واحدًا فقط عندما يكون لديك استعلام يحتاج إليه.
هل تبحث عن Application Config أو Roles & Permissions؟ هذه تصف التطبيق نفسه بدلًا من البيانات التي يضيفها — وتوجد ضمن Config. هل تبحث عن Connections (Linear, GitHub, Slack OAuth)؟ هذه وُجِدت ليتم استدعاؤها من دوال المنطق وتوجد ضمن Logic.