Czy konieczne jest dodawanie kolumn do tabeli? , czy po prostu mogą określić dodatkowe pola do przechowywania? Zdecydowanie sugeruję rozważenie czegoś takiego jak Entity-Attribute-Value zamiast zezwalania użytkownikowi końcowemu (administratorzy liczą się jako użytkownicy końcowi) na wprowadzanie zmian w schemacie.
W przypadku czegoś takiego masz tabelę do definiowania pól niestandardowych, a następnie tabelę skojarzeń wiele-do-wielu, aby umożliwić użytkownikowi określenie wartości pola niestandardowego dla kontaktu. Na przykład:
Contact
---------
-> ContactId
| FirstName
| LastName
| etc.
|
| ContactField
| --------------
| ContactFieldId <---
| FieldName |
| |
| ContactFieldValue |
| ------------------- |
-- ContactId |
ContactFieldId -------------------------
Value
Specyfika implementacji zależy oczywiście od Ciebie (na przykład, czy użyć ContactId + ContactFieldId
jako złożony klucz podstawowy w ContactFieldValue
), ale to powinno przybliżyć ogólny pomysł.