2012-05-22 52 views
0

我正在做一個數據庫,並有一個表結構如下處理屬性本身具有屬性的標準方法?

  Att1 Att2 Att3 .... 
User1  
User2 
User3 
.... 

,我想每一個屬性(ATT1,ATT2,ATT3,...)中有一個布爾變量連接到它。像下面這樣:

Att1 No 
Att2 No 
Att3 Yes 
...  ... 

每個屬性是來自用戶的數值分數(上市首選項),但我想它是否真正重要與否來標記每個屬性。有沒有處理這種類型的依賴的標準方法?謝謝!

+0

你有沒有具體的例子ow什麼Att1,2和3實際上會被調用? – Jodrell

+0

我認爲這對我的問題並不重要,但要澄清一些屬性可能是「Coffee」,「Tea」和「Creamer」,其中分數是每個用戶的偏好(從0到10)他們有庫存/可用。我想要做的就是回到事實之後 - 並且標記我們真正願意參與的重要事件。 – mstobb

回答

0

噢,如果我們可以在表格中嵌入記錄,這將是很好的。但是,標準SQL和大多數數據庫不支持這一點(雖然有例外)。

我會使用一致的命名約定,發明諸如「IsImportantAtt1」和「IsImportantAtt2」等字段。當我這樣做時,我也有一個約定,即所有的「Is」變量只取「Y」或「N」的值。如果我想在輸出中看到「是」和「否」,那麼我使用該轉換的視圖或在應用程序層中進行。

+0

如果您使用的是MS SQL,那麼'Bit'類型對於標誌是理想的 – Jodrell

-1

如果屬性本身不屬性,屬性的得分很重要嗎?如果沒有,你可以簡單地有一個約定,即NULL分數意味着屬性不重要。

否則,你可以爲每個屬性欄添加一個(布爾)柱:

  Att1 Important1 Att2 Important2 Att3 Important3 .... 
User1  
User2 
User3 
.... 

順便說一句,在屬性固定的嗎?即你是否總是具有完全相同的一組屬性?如果沒有,你可以更好地通過EAV model服務(儘管某些缺點EAVS通常有):

enter image description here

一個不重要的屬性可以簡單地從USER_ATTRIBUTE表省略(假設「不」的答案是我的問題在頂部)。

+0

我知道這聽起來很教條,但如果您真的可以通過EAV模型服務,那麼您也可以直接寫入服務器系統表。 – Jodrell

+0

@Jodrell Yup,這聽起來很教條;)儘管存在潛在的問題,但EAV仍有合法用途。有趣的是:[你的回答](http://stackoverflow.com/a/10719814/533120)也描述了EAV! –

+0

@BrankoDimitrijevic屬性是固定的,所以我不認爲EAV模型一定是最好的方法。即使我必須擁有所有重複的信息,但您對每個屬性的第二列的想法仍然很好。 – mstobb

0

這聽起來對我來說,Attribute實際上是一個實體的呼叫ListingPreference它有一個Id鍵,2個屬性,ScoreIsImportant和FK到User稱爲UserID

User currentley只有一個Id鍵。


總之,屬性沒有屬性,這意味着你的模型是錯誤的。

+0

你說得對。我認爲處理這種情況的標準方式是從來沒有進入過。我完全理解你在這裏的意思,如果我從頭開始,這將是一個更好的方式,但在我回到原點之前,我想我會按照@Gordon的建議重新命名這些字段。 – mstobb