Sql server 数据库设计-我需要这两个数据库字段中的一个吗?
我正在为数据库建立一个模式。数据库的目标是跟踪我们部门的应用程序。我有一个反复出现的问题,我正在努力解决 例如,我有一个“应用程序”表。我想跟踪是否有任何应用程序使用数据库或bug跟踪系统,所以现在我在Applications表中有名为 表:应用程序Sql server 数据库设计-我需要这两个数据库字段中的一个吗?,sql-server,database-design,Sql Server,Database Design,我正在为数据库建立一个模式。数据库的目标是跟踪我们部门的应用程序。我有一个反复出现的问题,我正在努力解决 例如,我有一个“应用程序”表。我想跟踪是否有任何应用程序使用数据库或bug跟踪系统,所以现在我在Applications表中有名为 表:应用程序 使用数据库(位) 数据库ID(int) 使用BugTracking(位) 错误跟踪_ID(int) 表:数据库: id 名字 表:错误跟踪: id 名字 我是否应该将“uses”列与相应的ID列合并,以便在applications表中只有一个bug
使用数据库(位)
数据库ID(int)
使用BugTracking(位)
错误跟踪_ID(int) 表:数据库:
id
名字 表:错误跟踪:
id
名字 我是否应该将“uses”列与相应的ID列合并,以便在applications表中只有一个bug跟踪列和一个数据库列 这里有关于数据库设计的最佳实践吗
注意:我希望运行“使用bug跟踪的应用程序百分比”之类的报告(尽管我想这两种方法都可以生成此数据)。这两种解决方案都有效。但是,如果你认为你偶尔想得到一个没有数据库/ BugTrack的应用程序列表,可以考虑使用标志字段减少一个(或两个)连接的查询。 位字段稍微非规范化,因为您必须保持两个字段同步以保持一段数据的更新,但我倾向于将它们用于此类情况,原因我在上一段中给出 另一种选择是将字段设置为null,并为那些没有DBs/etc的条目设置null,但这样会遇到外键约束问题
我不认为有任何一种最正确的方法,只要考虑一下权衡,然后对你的应用程序有什么意义。 < P>这两种解决方案都有效。但是,如果你认为你偶尔想得到一个没有数据库/ BugTrack的应用程序列表,可以考虑使用标志字段减少一个(或两个)连接的查询。 位字段稍微非规范化,因为您必须保持两个字段同步以保持一段数据的更新,但我倾向于将它们用于此类情况,原因我在上一段中给出 另一种选择是将字段设置为null,并为那些没有DBs/etc的条目设置null,但这样会遇到外键约束问题
我不认为有任何一个最正确的方法,只考虑权衡,并与你的应用程序有意义。
< P>我会用3个表来表示对象:<强>应用< /强>,<强>数据库< /强>和<强> BugTrace。然后我将使用两个联接表进行1对多联接:applicationdatabase和ApplicationBugTracking这两个联接表将同时具有应用程序id和另一个表的id。如果一个应用程序使用一个数据库,它将有一个将它们连接在一起的ApplicationDatabase记录。使用此设置,一个应用程序可以有0个数据库(ApplicationDatabase表中没有此应用程序的记录)或多个数据库(ApplicationDatabase表中有此应用程序的多个记录)。我将使用3个表作为对象:应用程序、数据库和错误跟踪。然后我将使用两个联接表进行1对多联接:applicationdatabase和ApplicationBugTracking 这两个联接表将同时具有应用程序id和另一个表的id。如果一个应用程序使用一个数据库,它将有一个将它们连接在一起的ApplicationDatabase记录。使用此设置,应用程序可以有0个数据库(ApplicationDatabases表中没有此应用程序的记录)或多个数据库(ApplicationDatabases表中有此应用程序的多个记录)。您可以删除“uses”字段,使id列为空,并让空值表示它不使用此功能。这是表示缺失值的常用方法 编辑:
要回答您的问题,您可以很容易地获得如下统计信息:
select
count(*) as TotalApplications,
count(Database_ID) as UsesDatabase,
count(BugTracking_ID) as UsesBugTracking
from
Applications
您可以删除“uses”字段并使id列可以为null,并且让null值表示它不使用该功能。这是表示缺失值的常用方法
编辑:要回答您的问题,您可以很容易地获得如下统计信息:
select
count(*) as TotalApplications,
count(Database_ID) as UsesDatabase,
count(BugTracking_ID) as UsesBugTracking
from
Applications
为什么不去掉这两个Use字段,只让_ID字段中的NULL值表示记录不使用该应用程序(bug跟踪或数据库)为什么不去掉这两个Use字段,只让_ID字段中的NULL值表示记录不使用该应用程序(bug跟踪或数据库)要回答已编辑的问题,请执行以下操作-
是的,这些字段应该组合在一起,空表示应用程序没有数据库(或bug跟踪器)。要回答编辑后的问题- 是的,字段应该合并,空表示应用程序没有数据库(或bug跟踪器)。我应该合并“使用”列吗 如果我看一下您的问题陈述,那么要么根本没有“使用”列,要么有两个。在任何一种情况下,你都不应该提到“theuses”一栏 我可以礼貌地建议你在提问时要学会精确吗?“我应该合并“使用”一栏吗?” 如果我看一下您的问题陈述,那么要么根本没有“使用”列,要么有两个。在任何一种情况下,你都不应该提到“theuses”一栏
我可以礼貌地建议您在提问时要学会精确吗?是的,在外键字段中使用null应该可以-使用位字段似乎是多余的 另一种方法(尽管可以考虑)