سؤال

أدرك أنه قد تكون هناك أسئلة مماثلة ولكن لم أتمكن من العثور على سؤال قريب بدرجة كافية للحصول على إرشادات.

ونظرا لهذه المواصفات،

Site
---------------------------
SiteID      int    identity
Name        varchar(50)

Series
---------------------
SiteID      int
SeriesCode  varchar(6)
...
--SeriesCode will be unique for every unique SiteID

Episode
----------------------
SiteID      int
SeriesCode  varchar(6)
EpisodeCode varchar(10)
...

التصميم/التنفيذ المقترح هو

Site
----------------------------
SiteID      int     identity
Name        varchar(50)


Series
-------------------------------------------
SeriesID    int     identity, surrogate key
SiteID      int         natural key
SeriesCode  varchar(6)  natural key
UNIQUE(SiteID, SeriesCode)
...

Episode
-------------------------------------------
EpisodeID   int     identity, surrogate key
SeriesID    int     foreign key
EpisodeCode varchar(6)  natural key
...

هل هناك أي خطأ في هذا؟هل من المقبول أن يكون لديك معرف السلسلة البديل كمفتاح أجنبي* هنا؟لست متأكدًا مما إذا كنت أفتقد أي مشكلات واضحة يمكن أن تنشأ.أم أنه من الأفضل استخدام المفاتيح الطبيعية المركبة (SiteID+SeriesCode / SiteID+EpisodeCode)؟في جوهر الأمر، سيؤدي ذلك إلى فصل جدول الحلقات عن جدول السلسلة وهذا لا يناسبني.

الجدير بالإضافة هو أن SeriesCode يبدو مثل "ABCD-1" وEpisodeCode مثل "ABCD-1NMO9" في بيانات الإدخال الأولية التي ستملأ هذه الجداول، لذلك أعتقد أن هذا شيء آخر يمكن تغييره.

*:المفتاح الخارجي "الافتراضي"، نظرًا لأنه قد تم تحديده مسبقًا بواسطة كبار المسؤولين، فلا ينبغي لنا استخدامه فِعلي مفاتيح خارجية

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

المحلول

نعم، كل شيء يبدو على ما يرام.النقطة الوحيدة (الثانوية) التي قد أشير إليها هي أنه ما لم يكن لديك جدول فرعي رابع آخر معلق من الحلقة، فمن المحتمل أنك لا تحتاج إلى معرف الحلقة، لأن الحلقة. رمز الحلقة هو مفتاح طبيعي لسمة واحدة كافية لتحديد الصفوف وتحديد موقعها في الحلقة.ليس هناك أي ضرر في تركها هناك، بالطبع، ولكن كقاعدة عامة أقوم بإضافة مفاتيح بديلة لتكون بمثابة أهداف لـ FKs في الجداول الفرعية، وأحاول إضافة مفتاح ناري إلى كل جدول لتحديد صفوف البيانات الزائدة عن الحاجة والتحكم فيها...لذا، إذا لم يكن لدى الجدول جدول آخر يشير إليه FK، (ولن أفعل ذلك أبدًا) لا أزعجني أحيانًا بتضمين مفتاح بديل فيه.

نصائح أخرى

ما هو المفتاح الخارجي "الافتراضي"؟هل قررت الجهات العليا عدم استخدام قيود المفاتيح الخارجية؟في هذه الحالة، أنت لا تستخدم المفاتيح الخارجية على الإطلاق.أنت فقط تتظاهر بذلك.

وهل الحلقة هي الاختيار الأفضل للكيان؟ألا يعني هذا حقًا "عرض" أو "بودكاست" أو نحو ذلك، ويصادف أنه دائمًا جزء من سلسلة في الوقت الحالي؟وإذا كان الأمر كذلك، فهل سيتغير ذلك في المستقبل؟هل سيتم إساءة استخدام الحلقة في النهاية لتشمل العرض خارج السلسلة؟في هذه الحالة، ربط الحلقة بالموقع عبر السلسلة قد يعود ليطاردك.

بالنظر إلى كل ذلك، وبافتراض أنك كشخص ناخر ربما لا تستطيع تغيير أي منها:لو كنت مكانك لشعرت بأمان أكبر باستخدام المفاتيح الطبيعية حيثما كان ذلك ممكنًا.في غياب قيود المفاتيح الخارجية، فإن ذلك يجعل التعرف على البيانات السيئة أسهل، وإذا كان عليك اللجوء إلى بعض الحيل SeriesCode='EMPTY' لاحقًا، فسيكون ذلك أسهل باستخدام المفاتيح الطبيعية أيضًا.

اقتراحي:

يستخدم طبيعي / تجاري كمفتاح أساسي كلما أمكن ذلك إلا في الحالات الثلاثة التالية:

  1. المفتاح الطبيعي/التجاري هو مجهول في لحظة الإدراج
  2. المفتاح الطبيعي/التجاري هو ليس جيدا (ليست فريدة من نوعها، فهي عرضة للتغيير بشكل متكرر)
  3. المفتاح الطبيعي/التجاري مركب من أكثر من 3 أعمدة وسيحتوي الجدول على جداول فرعية

في الحالتين 1 و2 يكون المفتاح البديل مطلوب.

في الحالة 3، يوجد مفتاح بديل بقوة مُستَحسَن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top