Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/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_Data Modeling - Fatal编程技术网

Sql server 记录之间多对多关系的正确数据库建模

Sql server 记录之间多对多关系的正确数据库建模,sql-server,data-modeling,Sql Server,Data Modeling,我只需要构建一个小的数据库应用程序,就可以使用一些最佳方法来创建表之间的关系。 我想我已经弄明白了,但我盯着它看了这么久,我需要第二双眼睛和第二种观点 这个型号是为赛车手设计的。我被困在设置关系的地方是在划分表上。基本上,驾驶员可以分为多个部门。为了说明这一点,我添加了一个DriverDivision表,它基本上是一个查找,允许我将一个驱动程序映射到多个分区 您可以从驾驶员的模型中看到一个点站立和一个比赛结果表。这与1:M的车手有关。我遇到的问题是,我还需要按分区筛选结果和排名。我是否也需要在

我只需要构建一个小的数据库应用程序,就可以使用一些最佳方法来创建表之间的关系。

我想我已经弄明白了,但我盯着它看了这么久,我需要第二双眼睛和第二种观点

这个型号是为赛车手设计的。我被困在设置关系的地方是在划分表上。基本上,驾驶员可以分为多个部门。为了说明这一点,我添加了一个DriverDivision表,它基本上是一个查找,允许我将一个驱动程序映射到多个分区

您可以从驾驶员的模型中看到一个
点站立
和一个
比赛结果
表。这与1:M的车手有关。我遇到的问题是,我还需要按分区筛选结果和排名。我是否也需要在除法和这两个表之间创建查找表?查看模型,我可以通过DriverInfo页面获得所有结果,但我不知道这是否是正确的方法?导航这个将总是返回一个完整的对象,这样我就可以看到所有的结果以及与之相关的驱动程序。我是否偏离了轨道,或者是否有更好的模型/模式可供遵循?当我第一次启动这个模型时,我认为驱动程序将是主要的一点,但感觉分裂可能是。一个车手必须与一个分区相关联,分数和结果与车手相关联,但我需要能够按分区查看所有分数和所有排名

如果有任何建议或建议,我将不胜感激


-干杯首先,DriverDivisionId是干什么的?我假设您使用它作为division/driver组合的主键,但是您可以同时使用DivisionId和DriverId作为主键

其次,您可以将divisionId添加到积分榜和比赛结果中,然后使用driverId和divisionId获取特定赛区/赛车手组合的结果

编辑:


在思考了一分钟之后,我想我应该再添加一个表,一个“种族”表,它将是所有种族的列表。在那里,你需要一个“RaceId”来识别种族。然后你可以在那里存储关于这场比赛的所有信息(包括赛区),并且在RaceResults表中,你会有你的RaceId、DriverId、PositionFinished、PositionStarted、RacerPoints

据我所知,一名赛车手会参加一场或多场比赛,而每场比赛都属于一个赛区

一个问题是,一个车手可以属于某个赛区,但不能参加该赛区的任何比赛吗?根据答案,您可能不需要驱动程序和分区之间的关系。消旋结果和除数之间的关系更有意义

所以你会得到这样的结果:

Driver -->> RaceResult <<-- Race
                       <<-- Division

Driver-->>racesult在这个模型中,您应该从结果和点中删除driverid,而是添加driverdivisionid。我不同意Giorgi的观点,您不应该为使用主键解决的问题创建额外的字段。每个条目都是DriverDivision表中的主键,因为每个DriverDivision组合都是唯一的。-编辑:还有,如果你要这样做,当你想为一个赛车手添加其中一个表中的所有数据时会发生什么?您现在必须了解每个DriverDivisionId,并对每个DriverDivisionId执行单独的查询,而不是仅使用DriverId。我喜欢这个想法,但我认为我仍然需要一个介于种族和分区之间的中间表。原因是在一场比赛中会有多个赛区。他们不是一对一。这是一个伟大的观点。我需要弄清楚他们是如何追踪的。我不认为有一种情况下,车手将是一个部门的一部分,但不是在它的比赛,但它可能是可能的。一场比赛将在一个晚上进行多个赛区。对于您建议的,我不需要翻转种族和划分,例如Driver-->RaceResult在您的示例中,划分条目将是特定于种族的。也许在比赛结果表中有两个的外键更好,我会把建议放在答案中。好的,我想我很接近了。最后的评论,问题。当我在想这个的时候,另一个场景是一场比赛可以在一个晚上跑多个赛区,一个(同一个)车手也可以在那场比赛的多个赛区。因此,在一场比赛中,车手可以在一个晚上进入并在3个不同的赛区(或多个赛区)跑步。这个标准会改变建议的方法吗?或者你的建议仍然支持这个方法吗?这很好,比赛结果有驾驶员、赛区和比赛的外键。您的示例将为同一种族和驾驶员生成多行,但分区不同。