2011-08-05 450 views

回答

3

表格對於用戶與數據庫的交互通常是至關重要的。因此沒有表格是致命的。

由此可見,在運行時動態創建表是一種不好的做法,因爲這意味着不能保證用戶的體驗。如果CREATE TABLE語句失敗,無論出於何種原因,用戶都會被塞滿。

因此,避免依賴表的運行時創建的業務流程是一個好主意。通常有解決方法,除非在特定的情況下。

這在一定程度上取決於RDBMS支持應用程序的風格。例如,Oracle具有全局臨時表的概念,幾乎可以在所有情況下刪除動態表創建的調用。但是即使沒有這些奇特的功能,通常也會有解決方法:例如,向表中添加A USERNAME列並在其上構建一個包含USERNAME=USER上的WHERE子句篩選的視圖。

基本上,DDL執行起來非常昂貴,就耗時和系統資源而言。它創建事務複雜性。這是有風險的:如果失敗,則用戶不能繼續。所有這些原因都應該避免。

3

一般來說不,這不是一個好主意。通常情況下,他們創建的內容都是表格中的記錄。

但也有例外,例如,如果您正在爲它們創建一個託管帳戶,那麼它們將隨後使用個人表。

沒有給出你的情況的更多細節,我不能給出比這更好的答案。

+0

例如CMS風格問卷應用程序。如果用戶創建一個問卷,我不知道它的價值在於是否動態地創建了一個包含他們問題(布爾,字符串int)的「類型」的表格,而不是爲所有不同的問卷提供通用表格。 –

+1

爲此目的,不要創建表格,最終會得到太多的表格。有幾種方法來構建數據庫來處理動態類型。最簡單的是有許多表 - 每種類型都有一個表,然後在主表中包含外鍵和要鏈接到的遠程表的名稱。您不能在它們之間的數據庫結構中設置正式的關係,但您可以使用一系列UNION查詢(每種類型都有聯接)自行完成。 – Ariel

0

對於SQL-Server,創建臨時表,表變量,使用表值函數等是一種非常普遍的做法。例如,它將在您的Web所調用的數據庫存儲過程中完成應用。

有沒有硬性規定,我知道如果說這是好還是壞 - 取決於具體情況。

0

我猜你正在做的事情是這樣的:

table_username(
id, 
userfield1, 
userfield2, 
ect... 
) 

一個替代方案是創建一個靜態表所示:

table_userfields(
id 
userid 
fieldname 
fieldvalue 
) 

唯一的問題是,字段值可能必須要是一個大的varchar。

但是你的方法沒有錯,它取決於你的特定需求。

+0

,似乎不是非常有效。 –

+0

@ mark-w不適合您的問答場景...我儘管意思是保存一些用戶特定的設置。 – AJC

0

一般來說,除非你的用戶都是好的數據建模者,否則這不是一個好主意。大多數用戶不會成爲好的數據庫設計師。普通用戶不會考慮諸如正確選擇數據類型和密鑰,設計編碼方案,分析依賴關係或應用規範化原則等。創建好的數據模型很困難,這就是爲什麼它傾向於由專家決定的原因。

+0

用戶不會創建表格。這將在後臺進行嚴格的控制並在一定程度上進行封裝。 –