سؤال

لديّ كيانات التالية: القوائم السكنية ، والقوائم التجارية ، وقائمة الإيجار والقوائم المميزة التي تحمل خصائص مميزة لكل مستخدم. يبدو أن الأكثر منطقية تستفيد من نهج SuperType/النوع الفرعي وخلق الجداول التالية:

CREATE TABLE listings (
  id ...,
  listPrice ...,
  ...
  PRIMARY KEY (id)
)

CREATE TABLE residential (
  id ...
  ...
  PRIMARY KEY (id),
  FOREIGN KEY id REFERENCES listings(id)
)

CREATE TABLE featuredListings (
  id ..,
  userId ...,
  featuredListingId ...
  PRIMARY KEY (id),
  FOREIGN KEY featuredListingId REFERENCES listings(id)
)

ولكن عندما أحاول إنشاء جدول سكني ، يعيد MySQL خطأ "MySQL خطأ رقم 1005. لا يمكن إنشاء جدول" سكني "(Errno: 150)"

ربما يكون DDL الخاص بي غير صحيح. أم أنه من الممكن أن يكون لديك PK الذي في نفس الوقت هو FK في MySQL؟ إذا لم يكن كذلك ، ما هو أفضل تصميم لمثل هذا السيناريو؟

هل كانت مفيدة؟

المحلول

اعتمادًا على المحرك الذي تستخدمه في MySQL ، لا يتم دعم المفاتيح الأجنبية. إذا كنت تستخدم InnoDB ، فسيتم دعمها على الرغم من أنني لست متأكدًا مما إذا كان ID يمكن أن يكون FK. لا أستطيع أن أرى لماذا لا.

إذا كنت تستخدم Myisam FKS غير مدعومة.

هناك أيضًا فرصة لفشلها لأن أسماء الأعمدة للمفتاح الأجنبي ليست داخل قوسين.

FOREIGN KEY id REFERENCES listings(id)

يصبح

FOREIGN KEY (id) REFERENCES listings(id)

كلاهما لديه هذه القضية.

يعقوب

نصائح أخرى

  • قم بتغيير اسم المفتاح الخارجي في جدول "سكني".
  • تأكد من وجود الجدول الأصل.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top