الاستعلامات والعلاقات
استعلم عن البيانات واربط الكيانات
الاستعلامات والعلاقات درس مجاني في Android Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Android Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Android Academy 4 دروس في المجموع.
ما بعد الجدول الواحد
تحتوي التطبيقات الفعلية على بيانات مترابطة: لدى المستخدم منشورات عديدة، ولدى الطلب عناصر عديدة. وتمثّل Room هذه العلاقات باستخدام المفاتيح الخارجية والتعليق التوضيحي @Relation.
الاستعلامات ذات المعلمات
مرّر الوسائط إلى @Query باستخدام بادئة النقطتين.
@Query("SELECT * FROM users WHERE name LIKE :search")
suspend fun search(search: String): List<User>إرجاع القيم التجميعية
يمكن للاستعلامات إرجاع قيم مفردة مثل أعداد العناصر.
@Query("SELECT COUNT(*) FROM users")
suspend fun count(): Intتعريف مفتاح خارجي
يشير Entity الابن إلى الكيان الأب باستخدام @ForeignKey. ويفرض ذلك التكامل المرجعي على مستوى قاعدة البيانات.
@Entity(
foreignKeys = [ForeignKey(
entity = User::class,
parentColumns = ["id"],
childColumns = ["userId"]
)]
)
data class Post(
@PrimaryKey val id: Int,
val userId: Int,
val title: String
)فهرسة المفاتيح الخارجية
توصي Room بفهرسة أعمدة المفاتيح الخارجية لتحسين أداء الاستعلامات. أضف @Index.
@Entity(
indices = [Index("userId")]
)
data class Post(/* ... */ val userId: Int)سلوك onDelete
حدّد ما يحدث للعناصر الأبناء عند حذف الكيان الأب، مثل استخدام CASCADE لحذفها أيضًا.
ForeignKey(
entity = User::class,
parentColumns = ["id"],
childColumns = ["userId"],
onDelete = ForeignKey.CASCADE
)نمذجة علاقة واحد إلى متعدد
أنشئ فئة تجمع الكيان الأب مع أبنائه باستخدام @Embedded و@Relation.
data class UserWithPosts(
@Embedded val user: User,
@Relation(
parentColumn = "id",
entityColumn = "userId"
)
val posts: List<Post>
)الاستعلام عن العلاقة
أرجع الفئة المجمّعة من DAO. تنفّذ Room الاستعلام الإضافي وتربط الكائنات معًا.
@Transaction
@Query("SELECT * FROM users")
suspend fun getUsersWithPosts(): List<UserWithPosts>لماذا نستخدم @Transaction هنا
لأن Room ينفّذ استعلامين اثنين (الآباء ثم الأبناء)، فإن إحاطة الدالة بـ @Transaction تضمن لقطة متسقة من دون عمليات كتابة متداخلة.
علاقة متعدد إلى متعدد باستخدام جدول ربط
في علاقة متعدد إلى متعدد (مثل الطلاب والمقررات)، استخدم جدول ربط ومعامل associateBy في @Relation.
@Relation(
parentColumn = "studentId",
entityColumn = "courseId",
associateBy = Junction(Enrollment::class)
)
val courses: List<Course>ملخص العلاقات
- يفرض
@ForeignKeyسلامة البيانات وقواعد الحذف المتسلسل. - تجمع
@Relationمع@Embeddedالكائنات المرتبطة. - تحافظ
@Transactionعلى اتساق عمليات القراءة متعددة الاستعلامات.
تحقق سريع
اختبر مدى فهمك للعلاقات.
مراجعة
لقد تعلمت ما يلي:
- تخصيص الاستعلامات باستخدام
:nameوإرجاع القيم التجميعية. - يفرض
@ForeignKeyسلامة البيانات باستخدام قواعدonDelete. - تنشئ
@Relationمع@Embeddedالكائنات المرتبطة؛ وأحط عمليات القراءة بـ@Transaction.
الأسئلة الشائعة
هل درس «الاستعلامات والعلاقات» مجاني؟
نعم — نص درس «الاستعلامات والعلاقات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Android Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Android Academy 4 دروس في المجموع.
ماذا ستتعلم في «الاستعلامات والعلاقات»؟
استعلم عن البيانات واربط الكيانات تتمرن على Android Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Android Academy؟
لا تُشترط خبرة سابقة. Android Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «الاستعلامات والعلاقات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Android Academy هذا؟
نعم. كل درس في Android Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الكيانات وDAOs
- فئة قاعدة بيانات Room
- الاستعلامات والعلاقات
- مراقبة البيانات باستخدام Flow