في علاقة واحدة إلى واحدة ، هل يجب أن أسقط أحد عمود معرف الجدول؟
-
27-09-2019 - |
سؤال
لدي الجداولان التاليتين في MySQL: العميل (ID ، FirstName ، LastName ...) مكافأة (معرف ، عميل ، قيمة ، ...)
العلاقة واحدة لواحد ، كل عميل لديه مكافأة واحدة فقط. (العميل فريد من نوعه في جدول المكافآت)
س: هل يجب أن أسقط عمود المعرف لجدول المكافآت؟ (أريد أن أعرف لماذا أو لماذا لا)
المحلول
أود إزالة المكافأة. سيؤدي القيام بذلك إلى إزالة الحاجة إلى قيود فريدة من نوعها على عمود المكافأة. customerid ، لأنه سيكون الآن PK. أي شخص ينظر إلى الطاولة سيرى الفردي بشكل أوضح بدون المكافأة. لن تحتاج إلى فهرس على BONUS.CUSTOMERID ، سيكون مؤشر PK هو كل ما تحتاجه ، لذلك يضيع مساحة القرص أقل وذاكرة ذاكرة التخزين المؤقت للذاكرة. أيضًا ، إذا كنت بحاجة إلى FK إلى جدول المكافآت ، فستستخدم القيمة العميل (PK الجديدة) ، والتي يمكن استخدامها للعودة إلى جداول العميل أو المكافآت ، وليس فقط المكافأة.
نصائح أخرى
أفترض أنه ليس في الواقع فرديًا حقيقيًا لأنه من المفترض أن يكون لديك عميل بدون صف مكافأة. تكون قيود المفاتيح الخارجية على غرار SQL اختياريًا دائمًا على الجانب المرجعية من أي علاقة.
أوافق على أن عمود المكافأة.
إذا كان Ono إلى واحد ، فلماذا يوجد أي جدول إضافي؟ يمكنك بدلاً من ذلك وضع "Bonusvalue" في جدول العميل الخاص بك.
(آخر: نعم ، يمكنك إسقاط معرف جدول المكافآت ، معرف العميل هو المفتاح الأساسي و "المعرف" زائدة تمامًا)