2012-07-09 59 views
0

我們假設您需要一張表來存儲設置。例如,我想將車輛設置存儲在一個表格中,但有超過100個設置,因此最好有一個包含100列的表格或包含2列的表格(1表示設置的名稱,1表示設置的名稱設置的值)?垂直或水平t-sql表的多個設置?

+1

所有的設置都是相同的數據類型嗎?他們會永遠在嗎? – HABO 2012-07-09 19:21:18

+0

它們不是全部相同的數據類型。 – Xaisoft 2012-07-10 13:36:49

回答

1

要麼有它的優點和缺點。

爲了提高靈活性,我會去立式(每行中的每個設置)的方式

如果使用每行一個設置,

  • 它會更容易添加新設置或刪除不需要的將來設置而不更改表格模式。
  • 您可以有一個用戶界面,這樣做沒有觸及數據庫
  • 您的客戶可以添加/不要求你的注意力

刪除設置,但(S)

  • 您可能需要記得設置關鍵字,沒有智能感知
  • 循環,光標

的100列接近

  • 智能感知
  • 這只是一個紀錄,應該會更快
  • 沒有循環,沒有光標

BUT(一個或多個)

  • 你可能有填充所有列如果它們不是NULLable
  • 更改模式,你可以你必須改變所有的相關代碼
1

我都是爲了正常化。因此,我將創建三個表格:車輛,設置和車輛設置,其中包含車輛ID,設置ID和設置值的三列。其實我在生產中有這個實現。如果用戶沒有明確指定值,我的設置表中也會存儲默認值。

如果您決定在將來添加設置,此方法非常方便。與其修改表格並且可能面臨重構,您只需將其他記錄添加到設置表中即可。

1

我不同意迪米特里的答案,但提出另一方面。

12或100會查看您希望設置發生更改的頻率。

如果每個設置都是一個列,那麼您將對新屬性進行程序更改。更簡單的查詢語法。如果它們是單值屬性,那麼我認爲你仍然有第三範式和更高效的查詢。

如果你使用Dimitri建議的3個表格,那麼你的設計稍微複雜一點,但是你可以添加和修改屬性運行時間。查詢將更復雜,有多個連接。你可以在設置表上建立一個查詢來建立真正的查詢。當然,我會用tcoder建議的光標連接。

如果你有一個.NET或其他前端,那麼你也可以通過從設置表讀取來建立查詢。如果你像一個GridView一樣綁定,你將不能生成列,但再次沒有那麼多的工作。