我正在为数据库整理架构。该数据库的目标是跟踪我们部门的应用程序。我有一个我试图解决的问题。
例如,我有一个“应用程序”表。我想跟踪任何应用程序是否使用数据库或错误跟踪系统,所以我现在在Applications表中有一个名为
的字段表:应用程序
使用数据库(位)
Database_ID(int)
UsesBugTracking(位)
BugTracking_ID(int)
表:数据库:
ID
名字
表: BugTracking:
ID
名字
我是否应该将“使用”列与相应的ID列合并,以便应用程序表中只有一个错误跟踪列和一个数据库列?
这里有数据库设计的最佳实践吗?
注意:我想运行“使用错误跟踪的应用程序百分比”等报告(虽然我猜这两种方法都可以生成此数据。)
答案 0 :(得分:4)
您可以删除“使用”字段并使id列可以为空,并让null值表示它不使用该功能。这是表示缺失值的常用方法。
编辑:
要回答您的说明,您可以轻松获得如下统计信息:
select
count(*) as TotalApplications,
count(Database_ID) as UsesDatabase,
count(BugTracking_ID) as UsesBugTracking
from
Applications
答案 1 :(得分:1)
为什么不摆脱两个Use字段,只需让_ID字段中的NULL值表示该记录不使用该应用程序(错误跟踪或数据库)
答案 2 :(得分:0)
两种解决方案都有效。但是,如果您认为您可能偶尔只想获得一个没有数据库/错误跟踪的应用程序列表,请考虑使用标记字段可以通过一个(或两个)连接来减少查询。
位字段是稍微非规范化,因为你必须保持两个字段同步以保持一个数据更新,但我倾向于喜欢它们这样的情况因为我给了在前一段中。
另一种选择是将字段置为可空,并为那些没有DB / etc的条目添加null,但是你遇到了外键约束的问题。
我认为没有任何一种至高无上的正确方法,只需考虑权衡并选择对您的应用有意义的方法。
答案 3 :(得分:0)
我会为对象使用3个表:应用程序,数据库和 BugTracking 。然后我会使用2个连接表来进行1对多连接: ApplicationDatabases 和 ApplicationBugTracking 。
2个连接表将同时具有application_id和另一个表的id。如果应用程序使用单个数据库,则它将具有将它们连接在一起的单个ApplicationDatabases记录。使用此设置,应用程序可以有0个数据库(ApplicationDatabases表中没有此应用程序的记录),或许多数据库(ApplicationDatabases表中此应用程序的多个记录)。
答案 4 :(得分:0)
“我应该合并”使用“栏目”
如果我查看你的问题陈述,那么根本就没有“使用”列,或者有两个。在任何一种情况下,你都不会说“THE”使用专栏。
我可以礼貌地建议你在提问时学会精确吗?
答案 5 :(得分:0)
是的,在外键字段中使用null应该没问题 - 拥有位字段似乎是多余的。
另一种方法(虽然它可能被数据库人员认为是邪恶的^^)是将它们默认为0并在bugtrack和数据库表中添加ID 0数据行,名称为“None”。当你做报告的时候,你必须做更多的工作,除非你提供“无”的价值,因为它们的整齐百分比......
答案 6 :(得分:-1)
回答编辑过的问题 -
是的,应该组合字段,NULL表示应用程序没有数据库(或错误跟踪器)。