Ich plane, eine Anwendung zu erstellen, die es dem Benutzer ermöglichen muss, sein eigenes Datenmodell dynamisch einzurichten (d. h. Felder, Datenstruktur usw. zu erstellen).
Ich stehe vor mehreren technischen Möglichkeiten, die alle Nachteile haben:
- in den Verwaltungsbildschirmen, aktualisieren Sie das SQL-Schema der DB, um die Änderungen zu berücksichtigen.
- Ich befürchte, dass dies eine sehr schlechte Idee ist, da die Anwendung über die entsprechenden Berechtigungen für die DB verfügen muss. Darüber hinaus, wenn jeder Klick ein neues SQL-Schema angewendet werden muss, kann ich mir vorstellen, dass ich direkt auf ein Loch laufen werde. Dies ist der Ansatz, den ich bei den meisten vom Benutzer anpassbaren Anwendungen gesehen habe.
- im DB-Schema eine Reihe generischer zusätzlicher Spalten erstellen und hoffen, dass es genügend Spalten für die komplexen Datenmodelle gibt.
- dies kann schnell zu einer funktionalen Einschränkung werden, wenn ich nicht mehr als X Spalten in meiner Anwendung zulassen kann
- in einer einzigen Tabelle alle Elemente mit einer ID-Spalte und einer Xml-Spalte zur Speicherung der benutzerdefinierten Spalten speichern.
- Dieser Ansatz kann die zuvor erwähnten Nachteile beseitigen, da das Sql-Schema statisch bleibt, aber da EF (das ich hoffte, verwenden zu können) nicht weiß, wie Xml-Datentyp zu verwalten, muss ich am Ende entweder mit manuellen SqlCommand mit XML-Funktion, oder das Schreiben eines benutzerdefinierten EF-Anbieters, die ich mir vorstellen, ziemlich viel Arbeit sein wird.
- Dies ist der Ansatz, den Microsoft für SharePoint gewählt hat... das lässt mich glauben, dass es der bessere ist (oder zumindest der weniger schlechte)
- eine Tabelle "Eigenschaften" mit einer itemId-Spalte, einer Spalte für den Eigenschaftsnamen und einer Spalte für den Eigenschaftswert erstellen
- dieser Ansatz impliziert eine sehr große Tabelle (X Einträge * Y Eigenschaften pro Eintrag)
- Ich muss meine Werte im Klartext speichern, auch wenn es sich zum Beispiel um Zahlen handelt.
Meine Anforderungen sind:
- den Code wartbar und testbar halten und alle gängigen Techniken anwenden
- eine reaktionsschnelle Anwendung mit großen Datenmengen haben
- eine möglichst sichere Anwendung haben
- den Benutzern die Möglichkeit geben, ihre Anwendung vollständig anzupassen (benutzerdefinierte Ansicht mit Filter/Sortierung nach Benutzereigenschaften erstellen).
Ich bin der Meinung, dass die Wahl des richtigen Designs jetzt die richtige sein muss, denn es wäre sehr schwer, dieses zu ändern.
Für jede Rückmeldung wären wir dankbar