面向对象关联和数据库访问

问题描述:

我的项目有一个类的软件和另一个类的操作系统。一个软件可能支持多种操作系统(我的实际问题要复杂得多)。面向对象关联和数据库访问

我不知道如何在我的数据库中以最有效的方式保存它。我的表结构如下:

表: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 
... 

您目前的做法是错误的 - 软件表中会有冗余。 我不确定你的意思是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