2013-01-22 19 views
7

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.

+2

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

+2

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 –

+0

@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

Odpowiedz

3

Pracuję z aplikacji firm trzecich, które obsługuje to w różny sposób:

  1. Większość tabel mają „niestandardową” wersję tabeli z różnych dziedzin, aby utrzymać ogólnie nazwanych typów danych: liczba1 Date26 , Text3 itd.). Tak więc istnieje firma i spółka, które mają stosunek 1-1.
  2. Listy są tworzone w tabeli, która ma ID listy (i odpowiedni sposób dla użytkowników do ustawienia schematu) i klucz obcy do połączenia z główną tabelą. Ta tabela ma kilka ogólnych kolumn, takich jak # 1.

  3. tworzyć własne tabele

  4. tworzyć własne poglądy i procedur przechowywanych i zarejestrować je w aplikacji. Te zestawy danych mogą być dołączane do sieci danych i/lub wykorzystywane w niestandardowych raportach.

Istnieje interfejs umożliwiający użytkownikowi etykietowanie kolumn według własnego uznania (tzn. Text1 = "Blah Blah Blah").W tej sytuacji jest mnóstwo zmarnowanych pól (chociaż moja firma zdołała wykorzystać większość pól, w tym Money47) i nie jest idealna do wydajności, nie można pokonać prawie nieograniczonej elastyczności, którą mamy.

Kluczem jest to, ile ten klient jest skłonny zapłacić za tę możliwość wraz z bieżącym wsparciem? Jeśli pozwolisz im utworzyć niestandardowe pola na istniejącej tabeli i zdecydują, że chcą zmienić typ danych, który nie będzie płynnie konwertowany, czy oczekują od ciebie przetasowania i konwersji?

Możemy wynająć pełnoetatowego programistę za to, co płacimy za ten system. SalesForce.com i podobne witryny mają taką możliwość. Nie sądzę, że chcesz się z tym pogodzić w przypadku jednorazowej aplikacji klienckiej. Mogą równie dobrze zapłacić za aktualizację aplikacji w długim okresie.

+0

Jeśli dobrze cię rozumiem, "niestandardowe" atrybuty (numer 1, data 26 itd.) Istniały od pierwszego dnia i po prostu tam siedzieli, czekając na wypełnienie danymi? Nie jestem wielkim fanem tego podejścia, chociaż * to * eliminuje niektóre bezpośrednie wady fizycznego modyfikowania tabeli. – bernhof

+0

Tak, te pola zostały dołączone do aplikacji. Zgadzam się, to nie jest idealne. – JeffO

+0

Dzięki za twój wkład. Na razie unikniemy dynamicznego podejścia i zamiast tego zaimplementujemy nowe atrybuty na żądanie. – bernhof