0

私のプロジェクトには、クラスのソフトウェアと別のクラスの OS があります。ソフトウェアは複数のオペレーティング システムをサポートする場合があります (私の実際の問題はもっと複雑です)。

データベースに最も効果的に保存する方法がわかりません。私のテーブル構造は次のとおりです。

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

これが最善の方法ですか?これにより、OOP でプログラミングするときに問題が発生しますか (私は DAO アプローチを使用します)、または次のように変更する必要がありますか:

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

1 に答える 1

1

現在のアプローチは間違っています。ソフトウェア テーブルに冗長性があります。winxp,win7...1 つのセルに複数の値を格納するという意味がよくわかりません。それも間違った方法です-値はアトミック(第1正規形)でなければなりません-しかし、各オペレーティングシステムのソフトウェアテーブルの行を複製することを意味する場合-冒頭で述べたように冗長性があります.

2 番目のアプローチは、はるかに優れているように見えます (もちろん、ソフトウェアテーブルのos列を削除した場合)。

フィールド/テーブルの編成が適切であることを確認するには、正規化について読む必要があります。これを参照してください。3番目の正規形は、必要なものです:)

于 2013-05-02T09:15:20.880 に答える