面向对象关联和数据库访问
问题描述:
我的项目有一个类的软件和另一个类的操作系统。一个软件可能支持多种操作系统(我的实际问题要复杂得多)。面向对象关联和数据库访问
我不知道如何在我的数据库中以最有效的方式保存它。我的表结构如下:
表: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.第三范式是你需要的:)
(编辑我的问题变更软件表)。 winxp,win7是指软件支持的操作系统。在'软件'表中,id是主键。 – Jasir 2013-05-02 18:47:35
但我的数据库可能有数千个软件,每个软件都支持5-6个操作系统。所以第二种方法比第一种方法需要更多的空间。 – Jasir 2013-05-02 18:49:15
_winxp,win7表示该软件支持的操作系统._我知道,但在第一种方法中,您希望将这些值存储在一个单元中? – 2013-05-03 08:03:35