Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Was ist der beste Weg, um einem Benutzer zu ermöglichen, Spalten zu seiner Datenbank on-the-fly hinzuzufügen?

Ist es eine absolute Anforderung, dass sie Spalten zur Tabelle hinzufügen , oder nur, dass sie zusätzliche zu speichernde Felder angeben können? Ich würde dringend vorschlagen, dass Sie etwas wie Entity-Attribute-Value in Betracht ziehen, anstatt dem Endbenutzer (Administratoren zählen als Endbenutzer) zu erlauben, Schemaänderungen vorzunehmen.

Für so etwas hätten Sie eine Tabelle, um Ihre benutzerdefinierten Felder zu definieren, und dann eine Viele-zu-Viele-Zuordnungstabelle, damit der Benutzer einen Wert für ein benutzerdefiniertes Feld für den Kontakt angeben kann. Zum Beispiel:

    Contact
    ---------
 -> ContactId
|   FirstName
|   LastName
|   etc.
|
|                        ContactField
|                        --------------
|                        ContactFieldId <---
|                        FieldName          |
|                                           |
|   ContactFieldValue                       |
|   -------------------                     |
 -- ContactId                               |
    ContactFieldId -------------------------
    Value

Die Einzelheiten der Implementierung liegen natürlich bei Ihnen (z. B. ob Sie ContactId + ContactFieldId verwenden als zusammengesetzter Primärschlüssel in ContactFieldValue ), aber das sollte die allgemeine Idee vermitteln.