2017-08-18 6 views
0

私は、メニュー項目のリストを含むテーブルを持っています。このメニュー項目テーブルは、メニューコンテンツテーブル、メニューダウンロードテーブルなどの5つの他のテーブルに関連しています。今では、各メニューに複数のテクニカルコードを関連付けることができるという、もう1つのレイヤーを追加するという新しい要件があります。私は、既存のデータに影響を与えずに最適化されたDB再構成を探しています。SQL Serverデータベースの再設計のアイデアは

メニュー表:

MenuID MenuName 
---------------- 
1  Menu1 
2  Menu2 

メニュー内容テーブル:

MenuContentID MenuID MenuContent 
--------------------------------- 
1    1  contentsss 
2    2  content2 

今、私はtechcodeとの新しい関係を追加する必要があります。それぞれmenunameには2つのバージョンがあります。私のアプリケーションは生産中です。だから、データベースとアプリケーションを再設計する最適な方法を考えています。

第1のアプローチは、コードを追加しtech_codeコードに基づいてテーブルおよびグループmenuitemに添加されます。

MenuID Code MenuName Tech_Code 
------------------------------- 
1  M Menu1  A 
2  M Menu2  B 
3  A Menu3  A 

MenuContentID MenuID MenuContent 
--------------------------------- 
1    1  contentsss 
2    2  content2 

第二の選択肢は、親テーブルの作成であり、我々は(参照テーブルにTech_Codeを追加)その親テーブルID

ParentMenuID MenuID 
------------------- 
1    1 
1    2 

MenuID ParentMenuID MenuName Tech_Code 
---------------------------------------- 
    1  M   Menu1  A 
    2  M   Menu2  B 
    3  A   Menu3  A 

第三のデザインを使用して、データのクエリをクエリ

ます
MenuID MenuName 
----------------- 
1  Menu1 
2  Menu2 

MenuContentID MenuID MenuContent Tech_Code 
---------------------------------------------- 
1    1  contentsss  A 
2    2  content2  B 

これを実装する最善の方法でしょうか?私の提案をお願いします。

答えて

0

「各メニューは複数のテクニカルコードと関連付けることができる」と言っていたので、最初のオプションは機能せず、2番目のオプションは混乱が少ないので、3番目のオプションを選択するか、

Tech_Code MenuID Code 
------------------------------- 
    A  1  M 
    B  1  K 

ここで、Tech_codeは、同じメニューに関連付けることができる主キーです。 私はあなたが生産DBで作業しているように、新しいテーブルの作成はそれほど危険である、と思います。あなたは、コードの種類を指定することができます。ここ

1

:テックコードやメニューコードまたはを....など

各メニューには、そのコード+コンテンツ

そして、あなたはメニューをしたい場合にコードの2種類がありますがあります同じ時間に、 "MenuCodeList"と "TechCodeList"としてCodeListのような2つのテーブルを持つことができ、CodeListを削除し、それらのIDをMenu_Code_Contentに追加するだけで、 "MenuCodeList"と "TechCodeList"テーブルだけが必要な場合はCodeTypeは不要です。

enter image description here

関連する問題