الانتقال إلى المحتوى الرئيسي

ما تغطيه طبقة البيانات

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

في هذا القسم

card-page-objects
الكائنات
defineObject - اعلن عن أنواع السجلات الجديدة مع حقول تخصهم.
card-page-extending-objects
توسيع الكائنات
defineField - إضافة حقول إلى الكائنات القياسية أو التطبيقات الأخرى.
card-page-relations
العلاقات
الاتصالات الثنائية الاتجاه MANY_TO_ONE / ONE_TO_MANY بين الأشياء.
card-page-timeline
النشاط من النوع
حدد أحداث المراجعة التلقائية وأحداث التطبيق الصريحة لجداول زمنية للتسجيل.
card-page-validation-rules
قواعد التحقق
defineValidationRule — أعلن الشروط التي يجب أن يستوفيها السجل قبل أن يمكن حفظه.

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

تكتشف واجهة سطر الأوامر هذه العناصر عبر تحليل AST أثناء وقت البناء، لذا فإن تنظيم الملفات يعود إليك — القاعدة المتّبعة هي src/objects/ و src/validation-rules/ و src/fields/ و src/indexes/ و src/timeline-activity-types/ و src/related-record-paths/. معرّفات UUID ثابتة من نوع universalIdentifier تربط كل شيء معًا عبر عمليات النشر.

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

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

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

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

قيود أخرى

  • تظل عبارات WHERE الجزئية تحت تحكم المشرف — لا يمكن للتطبيقات التصريح بها.
  • يتم تقييد كل كائن بعدد 10 فهارس مخصصة (لا تُحتسب فهارس الإطار نفسه).
رتّب مصفوفة fields بالطريقة التي ينبغي على Postgres استخدامها — العمود في أقصى اليسار أولًا، مثل دليل الهاتف. الفهارس ليست مجانية: كل عملية كتابة في الجدول تقوم بتحديثها. أضِف واحدًا فقط عندما يكون لديك استعلام يحتاج إليه.

مسارات السجلات المرتبطة (اختياري)

مسارات السجلات المرتبطة متاحة في المعاينة: تتزامن مع تطبيقك، لكن أذونات السجلات لا تستخدمها بعد. عند فرضها، تتطلب خطة Organization أو أعلى، مثل الأمان على مستوى الصف.
يبدأ مسار سجل مرتبط على كائن ويتبع ما يصل إلى ثلاثة حقول علاقة، يكون كل منها على الكائن الذي وصل إليه الحقل السابق. تستخدم أذونات السجلات هذه المسارات لتوسيع الوصول من سجل إلى سجلاته المرتبطة.
  • يُطبَّق المسار المتأصل (isInherent: true) كلما كان السجل الابتدائي قابلاً للقراءة، مهما كانت طريقة منح ذلك الوصول. استخدمه للسجلات التي تنتمي إلى أصلها، مثل مرفقات بطاقة منشور.
  • يُطبَّق المسار العادي فقط عندما يأتي الوصول إلى السجل الابتدائي مباشرةً من دور، بحيث تختار مساحات العمل المسارات التي تعتمد عليها.
src/related-record-paths/post-card-attachments.related-record-path.ts
أضف secondFieldMetadataUniversalIdentifier وthirdFieldMetadataUniversalIdentifier للمسارات الأطول. يجب أن تكون كل قفزة علاقة نشطة على الكائن الذي تم الوصول إليه حتى الآن، ولا يمكن لمسار أن يزور الكائن نفسه مرتين، ولا يمكن لمسارين استخدام القفزات نفسها.
هل تبحث عن Application Config أو Roles & Permissions؟ هذه تصف التطبيق نفسه بدلًا من البيانات التي يضيفها — وتوجد ضمن Config. هل تبحث عن Connections (Linear, GitHub, Slack OAuth)؟ هذه وُجِدت ليتم استدعاؤها من دوال المنطق وتوجد ضمن Logic.