Frage

Ich muss drei Elemente als Array in einer einzelnen Spalte speichern und diese Daten in späteren Funktionen schnell/einfach ändern können.

[---Sie können diesen Teil überspringen, wenn Sie mir vertrauen--]

Um es klarzustellen: Ich liebe und verwende ständig x_ref-Tabellen, aber ein x_ref funktioniert hier nicht, da es sich hier nicht um eine Eins-zu-viele-Beziehung handelt.Ich entwickle ein Projektmanagement-Tool, das unter anderem einen Benutzer einem Projekt zuweist und diesem Projekt wöchentlich Stunden zuweist, pro Benutzer, manchmal über Wochen und viele Wochen in der Zukunft.Natürlich gibt es viele Projekte, ein Projekt kann viele Teammitglieder haben, ein Teammitglied kann an vielen Projekten gleichzeitig beteiligt sein, ABER es ist nicht eins zu viele, weil ein Teammitglied viele Wochen lang an demselben Projekt arbeiten kann, es aber getan hat unterschiedliche Stunden für unterschiedliche Wochen.Mit anderen Worten: Jedes Objekt ist wirklich einzigartig.Außerdem können diese Daten jederzeit von jedem Teammitglied geändert werden und müssen daher leicht zu manipulieren sein.

Grundsätzlich muss ich drei Werte verarbeiten (das Teammitglied, die Woche, über die wir sprechen, und wie viele Stunden), die in einer Projektzeile in der Projekttabelle (unter der Spalte für Projektteammitglieder) abgelegt und als ein Element behandelt werden: ein Teammitglied – das ist tatsächlich Teil einer größeren Gruppe aller am Projekt beteiligten Teammitglieder.

[--ENDE ÜBERSPRINGEN, HIER MIT DEM LESEN BEGINNEN :) --]

Angenommen, das allgemeine Schema und die Beziehungstabellen der Anwendung sind kein völliger Mist und wir stehen in diesem einen Fall tatsächlich vor der Herausforderung, ein Array/Objekt als Wert für diese Spalte zu verwenden. Gibt es dafür eine bewährte Vorgehensweise?Wie ein bestimmter SQL-Datentyp?Ein bestimmtes Objekt-/Array-Format?CSV?JSON?XML?Der größte Teil der App ist in C#, aber (aus sehr seltsamen Gründen, die ich nicht erklären werde) könnten wir wirklich jede Umgebung verwenden, wenn es eine bestimmte gibt, die damit gut zurechtkommt.

Im Moment denke ich entweder an (Webservice + JS/JSON) oder PHP-Deserialisieren/Serialisieren (aber ich bin von der PHP-Lösung etwas überfordert, weil sie bei der Verwendung von Ajax etwas umständlich erscheint?) Hat irgendjemand darüber nachgedacht?

War es hilfreich?

Lösung

Hmm, es hört sich so an, als ob Sie Ihr Schema überdenken sollten. Wenn ich Sie verstehe, warum erstellen Sie nicht einfach eines wie folgt:

Users
  ...
Projects
  ...

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

Um herauszufinden, was der Benutzer in den nächsten 3 Wochen tut,

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

Auf diese Weise können Sie mehrere Benutzer mehrerer Projekte und Projekten an mehrere Benutzer zuweisen. Es erleichtert auch die Aktualisierung. Macht das Sinn?

Andere Tipps

Könnten Sie das Array in eine Textspalte reduzieren und ein spezielles Token verwenden, um jedes Datenelement, beispielsweise die Zeichenfolge, zu trennen? Joe/03/25 wäre ein Array someArray={'Joe','03','25'}.Funktioniert das?

Ich gebe zu, dass es bei diesem Ansatz Probleme geben könnte.Wenn Sie diese Spalte beispielsweise nach „Joe“ durchsuchen möchten, müssen Sie Folgendes verwenden ...LIKE 'Joe%'.Scheint nicht sehr indexierbar zu sein, daher werden Ihre Abfragen etwas langsam sein.

Einige Datenbanken wie Oracle erlauben tatsächlich Array-Typen als Spaltentypen (ich glaube, diese werden manchmal auch als verschachtelte Tabellen bezeichnet), und ich denken (könnte jedoch falsch sein), dass Sie die Elemente eines Arrays in einer Spalte suchen und indizieren können.Sie haben nicht angegeben, mit welchem ​​Datenbankanbieter Sie zusammenarbeiten, daher ist es möglich, dass Sie dies erhalten richtig Array, je nachdem, für welche Technologie Sie sich entscheiden.

Aus Gründen jemand anderer, der sich fragt ...

"Verdammt, Byron, du hast mich? Ich hasse es, auf dem Interweb dumm auszusehen, haha. Aber du hast Recht - das ist wirklich die bessere Lösung. Danke!"

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top