SQL Server数据库重新设计思路

时间:2017-08-18 03:40:42

标签: sql sql-server database

我有一个包含菜单项列表的表。此菜单项表与菜单内容表,菜单下载表等其他5个表相关。现在我们有了一个新的要求,即添加一个层,说每个菜单都可以与多个技术代码相关联。我正在寻找优化的数据库重组,而不会影响现有数据。

菜单表:

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

菜单内容表格:

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

现在我需要添加一个与techcode的新关系。对于每个menuname,我们可以有两个版本。我的申请正在制作中。所以我正在考虑一种重新设计数据库和应用程序的优化方法。

第一种方法是添加代码并根据代码将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

第二个选项是创建父表,当我们使用父表id

查询数据查询时
ParentMenuID MenuID 
-------------------
1                1
1                2

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

第3次设计(将Tech_Code添加到引用表中)

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

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

哪个是实现此目的的最佳方式?请给我你的建议。

2 个答案:

答案 0 :(得分:1)

您可以在此处指定代码类型:技术代码或菜单代码或....等

每个菜单都有其代码+内容

如果你想让菜单同时有两种类型的代码,你可以有两个像CodeList这样的表作为“MenuCodeList”和“TechCodeList”并删除CodeList并将它们的id添加到Menu_Code_Content,如果不需要CodeType,唯一需要单独的“MenuCodeList”和“TechCodeList”表

enter image description here

答案 1 :(得分:0)

如你所说"每个菜单都可以与多个技术代码相关联。所以你的第一个选项不起作用,你的第二个选项有点混乱,所以你应该去第三个选项,或者我有另一个建议创建一个这样的表:

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

这里,Tech_code是可以与相同菜单关联的主键。 我认为,在Production DB中工作时创建新表的风险较小。