سؤال

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

--- يمكنك تخطي هذا الجزء إذا كنت تثق بي-

لكي أكون واضحًا ، أحب وأستخدم جداول X_REF طوال الوقت ، لكن X_REF لا يعمل هنا لأن هذه ليست علاقة واحدة. أقوم بعمل أداة لإدارة المشاريع التي من بين أشياء أخرى ، تقوم بتعيين مستخدم لمشروع ويقوم بتعيين ساعات لهذا المشروع على أساس أسبوعي ، لكل مستخدم ، وأحيانًا لأسابيع عديدة في المستقبل. بالطبع هناك العديد من المشاريع ، يمكن أن يكون للمشروع العديد من أعضاء الفريق ، يمكن أن يشارك أحد أعضاء الفريق في العديد من المشاريع في وقت واحد ولكنه ليس أحاديًا لأن أحد أعضاء الفريق يمكن أن يعمل عدة أسابيع في نفس المشروع ولكن لديه ساعات مختلفة لأسابيع مختلفة. بمعنى آخر ، كل كائن فريد حقًا. أيضًا/أخيرًا ، يمكن تغيير هذه البيانات في أي وقت من قبل أي عضو في الفريق - وبالتالي يجب أن يكون بسهولة التلاعب به.

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

-تخطي ، ابدأ في القراءة هنا :)-

لذا ، على افتراض أن المخطط العام للتطبيق وجداول العلاقات ليسوا حماقة كاملة وأننا في الواقع على جدار في هذه الحالة لاستخدام صفيف/كائن كقيمة لهذا العمود ، هل هناك أفضل ممارسة لذلك؟ مثل نوع بيانات SQL معين؟ كائن معين/تنسيق صفيف؟ CSV؟ جيسون؟ XML؟ معظم التطبيقات في C# ولكن (لأسباب غريبة جدًا لن أشرحها) ، يمكننا حقًا استخدام أي بيئة إذا كان هناك نسخة معينة تتعامل مع هذا بشكل جيد.

في الوقت الحالي ، أفكر إما (WebService + JS/JSON) أو PHP غير متسلسل/تسلسل (لكنني رسمت قليلاً بواسطة حل PHP لأنه يبدو مرهقًا بعض الشيء عند استخدام أياكس؟) أفكار أي شخص؟

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

المحلول

حسنًا ، يبدو أنه يجب عليك إعادة التفكير

Users
  ...
Projects
  ...

WorkItemTracking 
  UserId
  ProjectId
  Week // between 1 and 52, or a datestamp
  Hours // number of hours budgeted for this task this week

للعثور على ما يفعله المستخدم خلال الأسابيع الثلاثة القادمة ،

SELECT * form workItemTracking where userId = <id> and week between <weekstart> and <weekend>

سيمنحك هذا القدرة على تعيين العديد من المستخدمين لمشاريع متعددة ، ومشاريع لعدة مستخدمين. كما أنه يجعل التحديث سهلاً. هل لهذا معنى؟

نصائح أخرى

هل يمكنك تسطيح المصفوفة في عمود نصي واستخدام بعض الرمز المميز الخاص لفصل كل جزء من البيانات ، على سبيل المثال السلسلة Joe/03/25 سيكون صفيف someArray={'Joe','03','25'}. هل يعمل هذا؟

أعترف أنه يمكن أن تكون هناك مشاكل في هذا النهج. على سبيل المثال ، إذا كنت تريد البحث في هذا العمود عن "Joe" ، فعليك استخدامه ...LIKE 'Joe%'. لا يبدو قابلاً للفهرسة للغاية ، لذا فإن استفساراتك ستكون بطيئة بعض الشيء.

تسمح بعض قواعد البيانات مثل Oracle فعليًا بأنواع الصفيف لأنواع الأعمدة (أعتقد أنها تسمى أحيانًا الجداول المتداخلة) ، وأنا فكر في (قد يكون من الخطأ) أنه يمكنك البحث وفهرسة عناصر صفيف في عمود. لم تحدد بائع قاعدة البيانات الذي كنت تعمل معه ، لذلك من الممكن أن تتمكن من الحصول على هذا ك مناسب صفيف ، اعتمادًا على التكنولوجيا التي تختارها.

من أجل أي شخص آخر يتساءل ...

"Damnit Byron لقد حصلت علي ؛ أنا أكره أن أبدو غبيًا على interweb هاها. لكنك على حق - هذا هو الحل الأفضل. شكرًا!"

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