Ich bin schwer zu finden, die beste Möglichkeit zum Speichern und Darstellen der Daten, die ich in SQL (MySQL DB) und C# -Fenster Form haben.Flattern Kind/Eltern Daten mit unbekannter Anzahl von Spalten
Meine Daten bei der Zuordnung zu Klassen, die so aussieht;
public class Parent
{
public string UniqueID { get; set; } //Key
public DateTime LoadTime { get; set; }
public string Reference { get; set; }
private List<Child> Elements { get; set; }
}
public class Child
{
public int MemberCode { get; set; } //Composite key
public int ElementCode { get; set; } //Composite key
public Object Data { get; set; }
}
Meine Daten sind sehr dynamisch. Ein übergeordneter Datensatz kann also beliebig viele untergeordnete Datensätze enthalten.
In dem Kind-Datensatz sind der MemberCode und der ElementCode tatsächlich Fremdschlüssel zu anderen Tabellen/Klassen, die mir beim Nachschlagen Details darüber geben, was die Daten tatsächlich sind. Zum Beispiel
MemberCode = 1 & ElementCode = 1 means data is a Date
MemberCode = 1 & ElementCode = 3 means data is a telephone number
MemberCode = 2 & ElementCode = 11 means data is a Product Code
MemberCode = 2 & ElementCode = 12 means data is a Service Code
etc
Diese kombinieren, um effektiv zu zeigen, was der Spaltenname ist, und diese sind immer die gleichen sind (so MemberCode = 1 & Elemente = 1 wird immer ein Datum sein, egal welches Kind Objekt sie zugeordnet ist) . Im Moment sind dies Referenzen/Nachschlagewerke, aber ich könnte auch die Daten in eine Variable in der Klasse einfügen, da dies die Arbeit erleichtern könnte. Dann wäre es eher wie ein Schlüsselwertpaar.
Im Moment habe ich diese in meiner DB als zwei Tabellen gespeichert, wobei der Kind-Datensatz auch die UniqueID vom Eltern enthält. Aber ich bin mir nicht sicher, ob das der beste Weg ist, wie ich erklären werde.
Meine Tabellen sind als solche
erstelltCREATE TABLE `PARENT` (
`ID` INT(11) NOT NULL AUTO_INCREMENT,
`LOADTIME` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`REFERENCE` VARCHAR(100) NOT NULL,
PRIMARY KEY (`ID`)
)
CREATE TABLE `CHILD` (
`ID` INT(11) NOT NULL,
`MEMBER_CODE` INT(11) NOT NULL,
`ELEMENT_CODE` INT(11) NOT NULL,
`DATA` VARCHAR(4000) NULL DEFAULT NULL,
PRIMARY KEY (`ID`, `MEMBER_CODE`, `ELEMENT_CODE`),
CONSTRAINT `fk_ID` FOREIGN KEY (`ID`) REFERENCES `Parent` (`ID`)
)
Nun will ich tun, was ist, diese Daten zu glätten, so dass ich einen einzigen übergeordneten Datensatz mit allen untergeordneten Datensätzen als eine einzelne Zeile angezeigt werden kann. Ich möchte es idealerweise in einer ObjectListView (http://objectlistview.sourceforge.net/cs/index.html) anzeigen, kann aber DataGrid berücksichtigen, wenn es das Leben erleichtert.
Da meine Daten dynamisch sind, habe ich Mühe, dies zu verflachen, und wenn ich 10 übergeordnete Datensätze auswähle, kann jede unterschiedliche Anzahl von untergeordneten Elementen haben, und jedes Element kann verschiedene MemberCodes und ElementCode haben effektiv verschiedene Spalten.
So könnten meine Daten wie folgt aussehen (aber in einem größeren Maßstab);
Aber wegen der dynamischen Natur der Daten, dann kämpfe ich, dies zu tun. Entweder in SQL oder in Objekten in meinem Code. Vielleicht gibt es sogar noch eine andere Möglichkeit, meine Daten besser zu speichern.
Können Sie bitte Ihre Datenbankobjekte skripten, damit wir sehen können, wie Sie diese Objekte gerade speichern? Kann ein Elternteil mehrere Kinder mit demselben ElementCode haben? Ist die Liste aller ElementCodes auch fest oder dynamisch? – ironstone13
Ich habe die DB create-Skripte für die Tabellen hinzugefügt und den memberCode, elementCode geklärt. Grundsätzlich sind diese immer gleich, über alle untergeordneten Objekte hinweg. –
Bitte geben Sie auch an, ob die Liste der Eigenschaften fest ist - d. H., Sie fügen häufig Paare '{MemberCode; ElementCode}' hinzu - oder sind sie vordefiniert? – ironstone13