我有一个包含菜单项列表的表。此菜单项表与菜单内容表,菜单下载表等其他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
哪个是实现此目的的最佳方式?请给我你的建议。
答案 0 :(得分:1)
您可以在此处指定代码类型:技术代码或菜单代码或....等
每个菜单都有其代码+内容
如果你想让菜单同时有两种类型的代码,你可以有两个像CodeList这样的表作为“MenuCodeList”和“TechCodeList”并删除CodeList并将它们的id添加到Menu_Code_Content,如果不需要CodeType,唯一需要单独的“MenuCodeList”和“TechCodeList”表
答案 1 :(得分:0)
如你所说"每个菜单都可以与多个技术代码相关联。所以你的第一个选项不起作用,你的第二个选项有点混乱,所以你应该去第三个选项,或者我有另一个建议创建一个这样的表:
Tech_Code MenuID Code
-------------------------------
A 1 M
B 1 K
这里,Tech_code是可以与相同菜单关联的主键。 我认为,在Production DB中工作时创建新表的风险较小。