我的背景更多是 Web 编程而不是数据库管理,所以如果我在这里使用了错误的术语,请纠正我。我正在尝试找出为我将要编写的应用程序设计数据库的最佳方法。
情况:我在一张表中有报告,在另一表中有建议。每个报告可以有许多建议。我还有一个单独的关键字表(用于实现标记)。但是,我只想让一组关键字同时应用于报告和建议,以便搜索关键字为您提供报告和建议作为结果。
这是我开始时的结构:
Reports
----------
ReportID
ReportName
Recommendations
----------
RecommendationID
RecommendationName
ReportID (foreign key)
Keywords
----------
KeywordID
KeywordName
ObjectKeywords
----------
KeywordID (foreign key)
ReportID (foreign key)
RecommendationID (foreign key)
Run Code Online (Sandbox Code Playgroud)
本能地,我觉得这不是最优的,我应该让我的可标记对象从一个共同的父级继承,并标记该注释父级,这将给出以下结构:
BaseObjects
----------
ObjectID (primary key)
ObjectType
Reports
----------
ObjectID_Report (foreign key)
ReportName
Recommendations
----------
ObjectID_Recommendation (foreign key)
RecommendationName
ObjectID_Report (foreign key)
Keywords
----------
KeywordID (primary key)
KeywordName
ObjectKeywords
----------
ObjectID (foreign key)
KeywordID (foreign key)
Run Code Online (Sandbox Code Playgroud)
我应该采用第二种结构吗?我在这里遗漏了任何重要的问题吗?另外,如果我选择第二个,我应该使用什么作为非通用名称来替换“对象”?
更新:
我在这个项目中使用 SQL Server。这是一个具有少量非并发用户的内部应用程序,因此我预计负载不会很高。在使用方面,关键字可能会很少使用。它几乎仅用于统计报告目的。从这个意义上说,无论我采用什么解决方案,都可能只会影响需要维护这个系统的任何开发人员……但我认为只要有可能就实施良好的实践是件好事。感谢所有的洞察力!