2015-04-30 30 views
0

我很努力尋找最有效的方法來處理此數據庫設計。這適用於想要管理其聯繫人的客戶。該軟件目前是水平的,允許每個客戶修改最多5列的字段標籤問題。這5個靜態列也位於聯繫人的表格中,用於存儲每個聯繫人的結果。對於這個例子,我們只使用兩個表格,Client和Contact。水平與垂直SQL與自定義列標題

該問題。我被要求延長這一點,以便客戶可以有N個自定義字段標籤問題。一個客戶端我想要1,另一個客戶端可能需要20,34或N.我不能看到這是正確完成水平,但容易垂直。這個問題就變成了,我必須做一個關鍵點才能在行/列顯示中顯示垂直結果。

問題。我在看這個錯誤,我應該改變我的觀點,並堅持一個水平表?如果是這樣,有人可以向我解釋我應該採取的方法嗎?

+1

什麼是應用程序寫入?你是否擁有對該應用程序的控制權,並正在改變它在範圍內呈現數據的方式? – maplemale

+0

@maplemale這是一個LAMP堆棧,所有考慮到我對範圍有控制權。 –

+0

您應該將PHP標籤添加到您的問題中。 – maplemale

回答

0

我會考慮將數據存儲在第三個表中的數據與FK關係到客戶端表。您的xml會爲每N個自定義字段添加其他元素。然後改變應用程序,而不是顯示靜態字段,它會從XML中派生出這些字段。

我的答案的合理性在某種程度上取決於顯示此數據的應用程序的體系結構,並假定您可以控制更改它。由於這個問題有點含糊,而且我甚至不知道你的應用是用什麼語言編寫的,或者它是否基於網頁,我無法真正爲您提供任何代碼示例。

+0

這將如何影響過濾器和搜索? –

+0

你想提供任何自定義字段的搜索選項嗎?只有3種方式可以看到我的建議工作得很好: 1.如果您的聯繫人數量有限(例如最多說幾百個),並且在從數據庫返回數據後以編程方式應用篩選器。 2.不允許我們的客戶過濾自定義字段,但提供一些靜態字段,每個聯繫人記錄必須具有哪些可以過濾並且只允許對這些字段進行過濾。 3. 1和2的組合。 如果這看起來不可行,請參閱上面的Sander的回答。這可能會更好。 – maplemale

0

不要擔心列的方向;讓PHP處理演示文稿。

存儲每個表中的Columns的列ColumnIDClientIDColumnNameSortOrder自定義列名。使用列ColumnID,ClientID,ContactIDValue創建第二個表ColumnValues,併爲每個客戶端的聯繫人存儲與每個自定義列名稱對應的值。

讓你的應用程序代碼建立一個HTML/CSS表具有以下邏輯:

  1. 第一行,列出每個ColumnName S的爲ClientID你正在使用,在相同的順序ColumNameSortOrder的值
  2. 爲此ClientID的每個Contacts在此第一行下創建單獨的行。在每一行中,列出Contact的每個ColumnValue,對應於您正在構建的行,在相同的SortOrder中,對於此ClientID
+0

這基本上是我的計劃,我的問題更多基於性能,以及涉及N的未來問題。 –

+0

我在說的是擺脫關鍵點,並讓PHP根據需要進行數據透視。 SQL非常擅長這樣的基於集合的操作,而PHP擅長按順序執行任務,例如逐個填充表中的單元格。只要你在所有的表上都有很好的索引,這個數據庫結構應該是一個小菜單,可以處理任何有點現代化的設備。這種方法可以擴展到可能有數千或數萬列。 –

+0

你有沒有任何例子的鏈接,以確保我沒有想到不同的東西? –