Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 数据库设计-我需要这两个数据库字段中的一个吗?_Sql Server_Database Design - Fatal编程技术网

Sql server 数据库设计-我需要这两个数据库字段中的一个吗?

Sql server 数据库设计-我需要这两个数据库字段中的一个吗?,sql-server,database-design,Sql Server,Database Design,我正在为数据库建立一个模式。数据库的目标是跟踪我们部门的应用程序。我有一个反复出现的问题,我正在努力解决 例如,我有一个“应用程序”表。我想跟踪是否有任何应用程序使用数据库或bug跟踪系统,所以现在我在Applications表中有名为 表:应用程序 使用数据库(位) 数据库ID(int) 使用BugTracking(位) 错误跟踪_ID(int) 表:数据库: id 名字 表:错误跟踪: id 名字 我是否应该将“uses”列与相应的ID列合并,以便在applications表中只有一个bug

我正在为数据库建立一个模式。数据库的目标是跟踪我们部门的应用程序。我有一个反复出现的问题,我正在努力解决

例如,我有一个“应用程序”表。我想跟踪是否有任何应用程序使用数据库或bug跟踪系统,所以现在我在Applications表中有名为

表:应用程序
使用数据库(位)
数据库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对多联接:applicationdatabaseApplicationBugTracking


这两个联接表将同时具有应用程序id和另一个表的id。如果一个应用程序使用一个数据库,它将有一个将它们连接在一起的ApplicationDatabase记录。使用此设置,一个应用程序可以有0个数据库(ApplicationDatabase表中没有此应用程序的记录)或多个数据库(ApplicationDatabase表中有此应用程序的多个记录)。

我将使用3个表作为对象:应用程序数据库错误跟踪。然后我将使用两个联接表进行1对多联接:applicationdatabaseApplicationBugTracking

这两个联接表将同时具有应用程序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应该可以-使用位字段似乎是多余的

另一种方法(尽管可以考虑)