Czy tworzenie tabeli w środowisku wykonawczym w sposób dynamiczny na podstawie interakcji użytkownika jest dobrą lub złą rzeczą dla aplikacji internetowej? (Mówię java, ale pytanie prawdopodobnie dotyczy więcej).Tworzenie tabel dynamicznie w środowisku wykonawczym
Odpowiedz
Tabele są na ogół kluczowe dla interakcji użytkownika z bazą danych. W związku z tym brak tabel jest śmiertelny.
Z tego wynika, że tworzenie tabel w locie, w czasie wykonywania, jest złą praktyką, ponieważ oznacza to, że nie ma gwarancji użytkownika. Jeśli instrukcja CREATE TABLE nie powiedzie się, z dowolnego powodu, użytkownik jest wypchany.
Tak więc dobrym pomysłem jest unikanie procesów biznesowych opartych na tworzeniu tabeli w czasie wykonywania. Zwykle są to obejścia, z wyjątkiem bardzo szczególnych okoliczności.
W pewnym stopniu zależy to od smaku RDBMS stanowiącego podstawę wniosku. Na przykład Oracle ma koncepcję globalnych tymczasowych tabel, która usuwa wezwanie do dynamicznego tworzenia tabel niemal we wszystkich okolicznościach. Ale nawet bez takich wymyślnych funkcji, zwykle istnieją sposoby obejścia tego problemu: na przykład dodanie kolumny USERNAME do tabeli i utworzenie na niej widoku zawierającego filtr WHERE na USERNAME=USER
.
Zasadniczo DDL jest drogi do wykonania, jeśli chodzi o czas i zasoby systemowe. Tworzy złożoność transakcyjną. Jest to ryzykowne: jeśli się nie powiedzie, użytkownik nie może kontynuować. Z tych wszystkich powodów należy tego unikać.
Generalnie nie, to nie jest dobry pomysł. Zwykle cokolwiek by tworzyli, byłyby zapisy w tabeli.
Są jednak wyjątki, na przykład w przypadku tworzenia konta hostingowego dla nich, z tabelami, które następnie będą używać osobiście.
Nie podając więcej szczegółów na temat sytuacji, nie mogę podać lepszej odpowiedzi.
Tak jak w przypadku SQL-Server, bardzo powszechną praktyką jest tworzenie tabel tymczasowych, zmiennych tabelarycznych, używanie funkcji o wartościach tabelarycznych itp. Na przykład, byłoby to wykonywane w przechowywanej w bazie danych procedurze wywoływanej przez twoją sieć Web. podanie.
Nie ma twardych i szybkich zasad, które wiem, czy to jest dobre, czy złe - w zależności od sytuacji.
Domyślam robisz coś takiego:
table_username(
id,
userfield1,
userfield2,
ect...
)
Alternatywą byłoby utworzyć tabelę statyczną tak:
table_userfields(
id
userid
fieldname
fieldvalue
)
Jedynym problemem jest to, że wartość pola będzie prawdopodobnie musiał być wielkim varcharem.
Ale twoje podejście nie jest złe, zależy od twoich szczególnych potrzeb.
który nie wydaje się bardzo wydajny. –
@ mark-w Nie dla twojego scenerio w ankietera ... Chciałem tylko zapisać pewne ustawienia użytkownika. – AJC
Generalnie nie jest to dobry pomysł, chyba że wszyscy użytkownicy są dobrymi modelarzami danych. Większość użytkowników nie tworzy dobrych projektantów baz danych. Przeciętny użytkownik nie myśli o takich rzeczach jak wybór właściwego typu danych i kluczy, projektowanie schematów kodowania, analiza zależności czy stosowanie zasad normalizacji. Tworzenie dobrych modeli danych jest trudne, dlatego zwykle pozostawia się je specjalistom.
użytkownik nie tworzyłby tabeli. Byłoby to zrobione w tle przy ścisłej kontroli i na pewnym poziomie enkapsulacji. –
- 1. Dodawanie klas jednostek dynamicznie w środowisku wykonawczym
- 2. Dynamiczne tworzenie i ustawianie elementów/właściwości klasy w środowisku wykonawczym
- 3. getElementById Gdzie element jest tworzony dynamicznie w środowisku wykonawczym
- 4. Jak utworzyć findViewById parm dynamicznie lub programowo w środowisku wykonawczym
- 5. Jak utworzyć właściwość klasy statycznej PHP w środowisku wykonawczym (dynamicznie)?
- 6. Tworzenie szablonów T4 w środowisku wykonawczym (czas budowy)?
- 7. hibernate: tworzenie encji (z adnotacjami) w środowisku wykonawczym
- 8. Dynamiczne tworzenie modelu danych podstawowych w środowisku wykonawczym
- 9. włączyć HeapDumpOnOutOfMemoryError w środowisku wykonawczym
- 10. Konfiguracja hibernacji w środowisku wykonawczym
- 11. Rozmiar obiektu w środowisku wykonawczym
- 12. Dodawanie obrazu w środowisku wykonawczym
- 13. Dynamicznie tworzenie klasy w Ruby
- 14. Uzyskiwanie danych wyjściowych procesu w środowisku wykonawczym
- 15. Znajdź zależne pakiety w środowisku Eclipse w środowisku wykonawczym
- 16. Dodawanie adnotacji Java w środowisku wykonawczym
- 17. Uzyskiwanie tożsamości podpisywania kodu w środowisku wykonawczym?
- 18. Architektura wtyczek do załadowania w środowisku wykonawczym
- 19. Jak konwertować typy w środowisku wykonawczym?
- 20. NoClassDefFoundError w środowisku wykonawczym z Gradle
- 21. Sprawdzanie wersji modułu Python w środowisku wykonawczym
- 22. Dlaczego okno jest większe w środowisku wykonawczym?
- 23. Załaduj kod bajtów Java w środowisku wykonawczym
- 24. Określenie hierarchii klas obiektu w środowisku wykonawczym
- 25. Sprawdź wersję systemu iOS w środowisku wykonawczym?
- 26. Java: Rozszerzanie klasy w środowisku wykonawczym
- 27. Utwórz typ delegowania w środowisku wykonawczym
- 28. Wykryj przyspieszenie sprzętowe w środowisku wykonawczym: Android
- 29. Android - Zmień układ fragmentów w środowisku wykonawczym
- 30. Aktualizacja tekstury/obrazu Three.js w środowisku wykonawczym
na przykład aplikacja do wymyślania stylu CMS.Jeśli użytkownik tworzy kwestionariusz, zastanawiam się, czy warto jego dynamicznie utworzyć tabelę, która zawiera specyficzne "typy" ich pytań (boolean, string int), a nie generyczne dla wszystkich różnych kwestionariuszy. –
W tym celu nie twórz tabel, skończysz z dużo zbyt wieloma tabelami. Istnieją sposoby na strukturę bazy danych do obsługi typów dynamicznych. Najłatwiej jest mieć wiele tabel - po jednym dla każdego typu, następnie w tabeli głównej należy uwzględnić klucz obcy plus nazwę tabeli zdalnej, do której ma prowadzić link. Nie można ustawić formalnej relacji w strukturze bazy danych między nimi, ale można to zrobić za pomocą serii zapytań UNION z łączeniami dla każdego typu. – Ariel