سؤال

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

لدي ثلاثة جداول أساسية:البطاقة، الملكية، وبطاقة الملكية.نظرًا لأن البطاقات لا تحتوي على نفس الخصائص، وغالبًا ما تحتوي على قيم متعددة لنفس الخاصية، فقد قررت استخدام نهج الجدول الموحد لتخزين البيانات بدلاً من وجود بنية عمود كبيرة حقًا في جدول البطاقات الخاص بي.

جدول الخصائص عبارة عن جدول أساسي لنوع الكلمات الرئيسية/القيمة.إذن لديك الكلمة الأساسية ATK والقيمة المخصصة لها.هناك خاصية أخرى تسمى SpecialType والتي يمكن أن تحتوي البطاقة على قيم متعددة لها، مثل "Sycnro" و"DARK"

ما أود القيام به هو إنشاء طريقة عرض أو إجراء مخزن يمنحني معرف البطاقة واسم البطاقة وجميع الكلمات الرئيسية للخاصية المخصصة للبطاقة كأعمدة وقيمها في ResultSet للبطاقة المحددة.لذلك من الأفضل أن أحصل على مجموعة نتائج مثل:

ID  NAME                   SPECIALTYPE
1   Red Dragon Archfiend   Synchro
1   Red Dragon Archfiend   DARK
1   Red Dragon Archfiend   Effect

ويمكنني أن أحسب نتائجي بهذه الطريقة.

أعتقد أن الأمر الأكثر روعة هو ببساطة ربط الخصائص معًا بناءً على كلمتها الرئيسية، حتى أتمكن من إنشاء ResultSet مثل:

1  Red Dragon Archfiend   Synchro/DARK/Effect

..ولكن لا أعرف إذا كان ذلك ممكنا.

ساعدني في Stackoverflow Kenobi!انت املي الوحيد.

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

نصائح أخرى

ذات صلة ولكن القيم يتم الاحتفاظ بها في أعمدة منفصلة وأنت تعرف "الأنواع الخاصة" الخاصة بك منذ وقت طويل:
استعلام SQL لمقارنة مبيعات المنتجات حسب الشهر

وإلا فإنني سأفعل ذلك باستخدام المؤشر في إجراء مخزن أو إجراء التحويل في طبقة الأعمال أو العرض التقديمي.

اطعن في sql إذا كنت تعرف جميع الحالات:

Select
    ID,NAME
    ,Synchro+DARK+Effect --  add a some substring logic to trim any trailing /'s
from
    (select
        ID
        ,NAME
        --may need to replace max() with min().
        ,MAX(CASE SPECIALTYPE WHEN "Synchro" THEN SPECIALTYPE +"/" ELSE "" END) Synchro
        ,MAX(CASE SPECIALTYPE WHEN "DARK" THEN SPECIALTYPE +"/" ELSE "" END) DARK
        ,MAX(CASE SPECIALTYPE WHEN "Effect" THEN SPECIALTYPE ELSE "" END) Effect
    from
        table
    group by
       ID
       ,NAME) sub1

لا تنهار عن طريق التسلسل لتخزين السجلات ذات الصلة في قاعدة البيانات الخاصة بك.إنها ليست أفضل الممارسات بالضبط.

ما تصفه هو جدول محوري.الجداول المحورية هي صعب.أقترح تجنبها إذا كان ذلك ممكنًا.

لماذا لا تقرأ فقط الصفوف ذات الصلة وتعالجها في الذاكرة؟لا يبدو أنك ستقضي الكثير من المللي ثانية في القيام بذلك ...

أحد الخيارات هو أن يكون للخصائص نوع خاصية، لذلك:

table cards
integer ID | string name | ... (other properties common to all Cards)

table property_types
integer ID | string name | string format | ... (possibly validations)

table properties
integer ID | integer property_type_id | string name | string value
foreign key property_type_id references property_types.ID

table cards_properties
integer ID | integer card_id | integer property_id
foreign key card_id references cards.ID
foreign key property_id references propertiess.ID

بهذه الطريقة، عندما تريد تعيين قيمة خاصية جديدة، يمكنك التحقق من صحتها حسب نوعها.يمكن أن يكون أحد الأنواع هو "SpecialType" مع تعداد القيم.

لدي نوع/تنسيق لجدول الخصائص الخاص بي، وبهذه الطريقة أعرف كيفية الإرسال/التقييم عندما أتعامل مع قيمة عددية.لم أكن متأكدًا مما إذا كان الأمر ذا صلة بهذه المشكلة أم لا.

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