在運行時基於用戶的交互動態創建表格是Web應用程序的好事還是壞事? (我在說java,但問題可能適用於更多)。在運行時動態創建表格
回答
表格對於用戶與數據庫的交互通常是至關重要的。因此沒有表格是致命的。
由此可見,在運行時動態創建表是一種不好的做法,因爲這意味着不能保證用戶的體驗。如果CREATE TABLE語句失敗,無論出於何種原因,用戶都會被塞滿。
因此,避免依賴表的運行時創建的業務流程是一個好主意。通常有解決方法,除非在特定的情況下。
這在一定程度上取決於RDBMS支持應用程序的風格。例如,Oracle具有全局臨時表的概念,幾乎可以在所有情況下刪除動態表創建的調用。但是即使沒有這些奇特的功能,通常也會有解決方法:例如,向表中添加A USERNAME列並在其上構建一個包含USERNAME=USER
上的WHERE子句篩選的視圖。
基本上,DDL執行起來非常昂貴,就耗時和系統資源而言。它創建事務複雜性。這是有風險的:如果失敗,則用戶不能繼續。所有這些原因都應該避免。
一般來說不,這不是一個好主意。通常情況下,他們創建的內容都是表格中的記錄。
但也有例外,例如,如果您正在爲它們創建一個託管帳戶,那麼它們將隨後使用個人表。
沒有給出你的情況的更多細節,我不能給出比這更好的答案。
對於SQL-Server,創建臨時表,表變量,使用表值函數等是一種非常普遍的做法。例如,它將在您的Web所調用的數據庫存儲過程中完成應用。
有沒有硬性規定,我知道如果說這是好還是壞 - 取決於具體情況。
我猜你正在做的事情是這樣的:
table_username(
id,
userfield1,
userfield2,
ect...
)
一個替代方案是創建一個靜態表所示:
table_userfields(
id
userid
fieldname
fieldvalue
)
唯一的問題是,字段值可能必須要是一個大的varchar。
但是你的方法沒有錯,它取決於你的特定需求。
,似乎不是非常有效。 –
@ mark-w不適合您的問答場景...我儘管意思是保存一些用戶特定的設置。 – AJC
一般來說,除非你的用戶都是好的數據建模者,否則這不是一個好主意。大多數用戶不會成爲好的數據庫設計師。普通用戶不會考慮諸如正確選擇數據類型和密鑰,設計編碼方案,分析依賴關係或應用規範化原則等。創建好的數據模型很困難,這就是爲什麼它傾向於由專家決定的原因。
用戶不會創建表格。這將在後臺進行嚴格的控制並在一定程度上進行封裝。 –
- 1. 動態創建表(在運行時)
- 2. 動態表格行創建
- 3. 在運行時動態創建WPF ItemTemplate
- 4. 在運行時創建動態類
- 5. 動態創建變量在運行時
- 6. 在html表格中動態創建行
- 7. 在運行時動態克隆表格
- 8. 在表格中動態創建表格
- 9. EXT JS 4創建動態網格,在運行時決定列
- 10. Golang創建動態函數(運行時)
- 11. Flex動態組件運行時創建
- 12. 在XML中運行時動態構建表格佈局
- 13. Thymeleaf-爲表格行創建動態ID
- 14. 動態創建表格和行
- 15. 着色動態創建的表格行
- 16. 創建在運行時增長的動態表單
- 17. 在運行時創建動態正則表達式
- 18. SQLiteDatabase:在運行時動態創建多個表?
- 19. 在運行時創建一個包含動態表的Crystal Report
- 20. java-hibernate在運行時創建動態表
- 21. 使用表格行模板在asp.net中創建動態表格
- 22. 創建動態表格
- 23. 動態創建表格
- 24. 動態創建表格
- 25. mysql動態創建表格
- 26. 創建動態html表格
- 27. 創建動態表格
- 28. 如何在運行時(動態)創建PHP靜態類屬性?
- 29. 在騾流中創建動態表格
- 30. 在PHP中創建動態表格
例如CMS風格問卷應用程序。如果用戶創建一個問卷,我不知道它的價值在於是否動態地創建了一個包含他們問題(布爾,字符串int)的「類型」的表格,而不是爲所有不同的問卷提供通用表格。 –
爲此目的,不要創建表格,最終會得到太多的表格。有幾種方法來構建數據庫來處理動態類型。最簡單的是有許多表 - 每種類型都有一個表,然後在主表中包含外鍵和要鏈接到的遠程表的名稱。您不能在它們之間的數據庫結構中設置正式的關係,但您可以使用一系列UNION查詢(每種類型都有聯接)自行完成。 – Ariel