2013-05-02 75 views
0

我的項目有一個類的軟件和另一個類的操作系統。一個軟件可能支持多種操作系統(我的實際問題要複雜得多)。面向對象關聯和數據庫訪問

我不知道如何在我的數據庫中以最有效的方式保存它。我的表結構如下:

表:OS

id  name   platform 
================================= 
winxp  Windows XP windows 
win7  Windows 7  windows 
... 

表:軟件

id  name    publisher  os 
==================================================== 
chrome Google Chrome google  winxp,win7,... 
ccleaner Ccleaner   piriform  winxp,win7,... 
... 

這是最好的辦法嗎?將與面向對象編程(我使用DAO方法)時,這會引起其他問題,或者我應該改變它somethig類似以下:

表:OS

id  name   platform 
================================= 
winxp  Windows XP windows 
win7  Windows 7  windows 
... 

表:軟件

id  name    publisher 
===================================== 
chrome Google Chrome google  
ccleaner Ccleaner   piriform 
... 

表:os_support

softwareid  os 
====================== 
chrome   winxp 
chrome   win7 
ccleaner   winxp 
ccleaner   win7 
ccleaner   win8 
... 

回答

1

您目前的做法是錯誤的 - 軟件表中會有冗餘。 我不確定你的意思是winxp,win7... - 在一個單元中存儲多個值?這也是錯誤的方法 - 值應該是原子的(第一範式) - 但如果你的意思是在每個操作系統的軟件表中重複行 - 就會有冗餘 - 就像我在開始時所說的那樣。

第二種方法看起來好多了(當然,如果你在軟件表擺脫OS列)。

爲了確保字段/表格組織的正確性,您應該閱讀有關規範化的內容。 Reffer this.第三範式是你需要的:)

+0

(編輯我的問題變更軟件表)。 winxp,win7是指軟件支持的操作系統。在'軟件'表中,id是主鍵。 – Jasir 2013-05-02 18:47:35

+0

但我的數據庫可能有數千個軟件,每個軟件都支持5-6個操作系統。所以第二種方法比第一種方法需要更多的空間。 – Jasir 2013-05-02 18:49:15

+0

_winxp,win7表示該軟件支持的操作系統._我知道,但在第一種方法中,您希望將這些值存儲在一個單元中? – 2013-05-03 08:03:35