2010-01-20 24 views
1

我正在看一個問題,該問題涉及用戶將帶有各種字段結構的記錄列表上傳到應用程序中。第二部分將允許用戶指定字段來捕獲信息。是否使用多個表格來處理用戶定義的字段?

這是一個超越任何事情的一步,完成了這一點,我將自己設計一個靜態RDMS結構。在某些方面,所有記錄將被視爲相同,因此每個記錄都會有一些共同的字段。幾乎所有的查詢都將在這些常用字段上運行。

我的第一個想法是動態地爲每個導入生成一個新表,併爲每個數據捕獲字段spec指定另一個表。然後爲應用程序中的每個記錄創建一個帶有guid的主表以及常用字段,指定數據導入到的表的名稱以及包含數據捕獲字段的表的名稱。

有關動態生成表中的字段的更多信息(元數據?)可以存儲在xml或「屬性」表中。

這意味着當用戶登錄到應用程序時,我將動態選擇要呈現給用戶的數據表,並且如果數據庫不僅表示多個用戶,而且還表示多數據庫。

我的問題是還有其他方法來解決這種可變的現場問題,即時通訊我在這裏下了一條無人看管的路徑?

我相信EAV將要求我有一個表,定義每個導入/數據捕獲規範的字段,然後使用導入字段值數據定義另一個表,這看起來不切實際。

回答

0

每個領域是什麼樣的?每個記錄的字段類型可能不同?

我正在開發一個程序,它可以處理它,而我們處理它的方式基本上是一個記錄表,它指向一個記錄字段表。記錄字段表包含所有字段以及數據庫中實際字段的字段名稱(列名稱)。然後我們有一個記錄數據表,這是每個記錄所有數據的記錄。我們還存儲一個record_id,告訴它它正在保存哪個記錄。

這就是我們如何做到的,如果記錄的每一列都是相同的類型,那麼我們不需要向表中添加新的列,並且如果它有更多的字段或不同類型的字段,那麼我們將相應的字段添加到數據表中。

我想這就是你在說什麼..糾正我,如果我錯了。

+0

是的,我動態地向recorddata表添加一列。到目前爲止,它對我們來說工作得很好,我們有一個字符定義了許多不同的字段類型,所以在添加一個字段,該字段的表看起來像'record_id,field_1_t'(t表示文本),添加後看起來像' record_id,field_1_t,field_2_t'或'field_1_t,field_1_i'(i代表整數)。 – Earlz 2010-01-20 23:39:11

+0

請注意,「record_field」表是保存「record_data」表的元數據的表。 – Earlz 2010-01-20 23:39:49

+0

我們實際上有不同的「記錄」類型,對於每種類型,我們都把它放在一張表中,這樣就有希望每桌不會超過50-80列......它仍在開發中,請說明目前支持什麼樣的用法,因爲我們現在都不太確定。 (雖然它看起來很有希望它應該很快) – Earlz 2010-01-20 23:47:42

1

我討厭將XML存儲在數據庫中,但這是一個理想的例子。最初將用戶導入存儲爲XML。隨着數據模式的成熟,您可以稍後決定爲更大的客戶端保留哪些表。當用戶選擇他們想要查詢的字段時,那就是當你回來並構建一個可靠的模式時。

0

我認爲用戶可以添加字段的表的每種類型的用戶定義字段的附加表是一個很好的方法。假設您將記錄加載到user_records(id)中,那麼該表的id列將是用戶定義字段表中的外鍵。 用戶定義的字符串字段將進入user_records_string(id,name),其中id是user_records(id)的外鍵,name是字符串,或者是用戶定義的字符串字段列表的外鍵。

在它們上搜索需要將它們連接到基表,可能使用子選擇根據用戶元數據過濾到一個字段,以便可以將正確的字段添加到查詢中。

要模擬用戶創建多個表,可以在user_records表中有一個指向表列表的外鍵,並在查詢單個表時對其進行過濾。

這將允許您的架構是靜態的,同時允許用戶任意添加字段和表。

+0

我在想'user_records'表具有所有導入將具有的公共字段,'user_records_string'會說5記錄每個user_records記錄是否存在5個用戶定義的字段類型字符串 – 2010-02-12 22:08:04

+0

這就是我的想法,是的 – 2010-02-13 00:10:47

相關問題