Pracujemy nad aplikacją .NET z zapleczem SQL Server. Klient żąda możliwości dynamicznego dodawania niestandardowych atrybutów do jednostek po wdrożeniu aplikacji.Umożliwianie użytkownikom końcowym dynamicznego dodawania kolumn do tabeli
Zgodnie z sugestią in a similar question możemy utworzyć tabelę, która będzie zawierać wiersz dla każdej wartości atrybutu niestandardowego (model Entity-attribute-value). Rozważamy jednak umożliwienie użytkownikom końcowym rzeczywistej modyfikacji tabeli (also suggested w tym samym pytaniu), tj. Dodawanie i usuwanie kolumn.
(Edit: jak zauważył w komentarzach, DDL nie byłyby wykonywane bezpośrednio przez użytkowników lub aplikacji, ale za pośrednictwem procedur przechowywanych, zapewniając, że wszystko przebiega sprawnie)
Główne powody to:
- Zwiększona wydajność/atrybuty wyszukiwania
- Atrybuty prawie zawsze muszą pojawiać się jako kolumny np. w siatce danych w interfejsie użytkownika lub podczas wyodrębniania danych do dalszego przetwarzania w Excel/PowerPivot.
- Dane są silnie wpisany (w przeciwieństwie do przechowywania wszystkich wartości atrybutów jako varchar)
- Uproszczony model danych
Czy są jakieś zastrzeżenia, że powinniśmy być świadomi?
Rzeczy, które przychodzą na myśl to:
- Backup/operacje, które mogą być w stanie sprostać zmieniającym się struktura danych
- zależnych obiektów (takich jak widoki), które nie są prawidłowo aktualizowane w celu odzwierciedlenia przywrócić te zmiany (widok zależny musiałby wykonać
select * from table
, aby uwzględnić dowolne dodane kolumny). - ...
Wszelkie dane wejściowe dotyczące tego podejścia jest bardzo mile widziane.
Jest to prawdopodobnie jeden przypadek, w którym zdenormalizowany model wartości [Entity-attribute-value] (http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model), w którym występują atrybuty przechowywane jako wiersze miałyby największy sens. – mellamokb
Tak, nie pozwól, aby użytkownicy rzucali kluczem małpy do twojej bazy danych. Przynajmniej z EAV możesz mieć kontrolę nad tym, co sieje spustoszenie ... http://sqlblog.com/blogs/aaron_bertrand/archive/2009/11/19/what-is-so-bad-about-eav -anyway.aspx –
@AaronBertrand, dzięki za link, kilka dobrych punktów. Wspomina jednak o tych samych wadach, które spowodowały, że badaliśmy podejście inne niż podejście EAV. Nie pozwolilibyśmy użytkownikom na bezpośrednie wykonywanie DDL. Kilka procedur przechowywanych może służyć jako środek odstraszający małpy, zapewniając, że operacje dodawania/usuwania działają płynnie. Ponadto tylko uprawnieni użytkownicy mieliby uprawnienia do ich wykonywania. – bernhof