Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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
Database design 外键可为空时如何绘制表_Database Design_Foreign Keys_Relational Database - Fatal编程技术网

Database design 外键可为空时如何绘制表

Database design 外键可为空时如何绘制表,database-design,foreign-keys,relational-database,Database Design,Foreign Keys,Relational Database,我无法创建此关系图。我知道怎么了,也明白为什么。飞行段(左)中的Route_ID可以为空,而Route表(右)中的Route_ID不能为空 但是FlightLeg中的Route_ID可以合法地为空。可能用户还没有指定路线。但是当它被指定时,我想确保routes表中有一个相关的行。我可以(并且已经)确保Route_ID是从Route表中的有效路由列表中选取的,因此不存在用户输入错误的可能性。他们总是选择一条有效的路线。他们可能根本就不会选择路线。这阻止了我创建这个关系图 正因为如此,我知道图表工具

我无法创建此关系图。我知道怎么了,也明白为什么。飞行段(左)中的Route_ID可以为空,而Route表(右)中的Route_ID不能为空

但是FlightLeg中的Route_ID可以合法地为空。可能用户还没有指定路线。但是当它被指定时,我想确保routes表中有一个相关的行。我可以(并且已经)确保Route_ID是从Route表中的有效路由列表中选取的,因此不存在用户输入错误的可能性。他们总是选择一条有效的路线。他们可能根本就不会选择路线。这阻止了我创建这个关系图

正因为如此,我知道图表工具是正确的,这意味着我走错了方向。任何人都可以建议如何使这项工作

我需要允许用户不指定路由,但当他们指定路由时,它必须是有效的路由

我如何对此进行图解并创建关系

谢谢


编辑:没有10个代表点,不能发布一张该死的照片。啊!希望链接能起作用。

正确的方法是使用多对一关系。所以

request_flight_legs >--o route
该关系意味着
请求飞行\u航段
可能有一条航线,在这种情况下
请求飞行\u航段。航线id
将有一个值。如果
request\u flight\u legs
没有路线(尚未),则该表中的
route\u id
将为空。它在
request\u flight\u legs
上的外键中实现为可空列。在所有情况下,
route.route\u id
总是有一个值。它是一个不可为空的列


有什么东西阻止你这么做吗?

我不明白。只需在
request\u flight\u leg
表中将
route\u id
设为空即可。(您可能还应该提到您正在使用的工具,因为这听起来像是工具问题,而不是“SQL”问题)我已经提到了flight legs表中的Route_ID可以为null。问题是它在路由表中不能为null。而且,该工具是普通的旧SSM。谢谢显然,一定有什么我违反了,即使我的设置正如你所建议的。Legs.Route_ID可为空。Route.Route_ID是主键,不可为空。以前从未听说过“多对一”关系,但这正是我想要的。在SSMS中使用图表生成器。我认为存在数据冲突问题,无法创建此关系。
request\u flight\u legs
表上是否有外键?看看一些问题:两个表是否在同一个数据库中?你有正确的权限吗?抱歉,我不确定您是从现有数据库创建图表还是使用图表创建新表?您是否遇到特定错误或无法更改属性。。。问题太多:)尝试在flight_legs表上创建FK时发生此错误。基本上,我的外键可以为null(可以在不指定route_id的情况下创建记录,稍后再添加),但当然,路由表上的主键不能为null。我认为正是这种违反阻止了fk的产生。无法将可能为空的fk添加到绝对不为空的pk。也许我看错了,事实上,这两个表之间没有我想象中的关系。我只想确保,如果在任何航班航段中输入了路线id,那么路线id就存在于路线表中。也许这根本不是一种关系?你想做的基本上是定义一个外键(或者更准确地说是一个可选的外键),所以存在一种关系。确切的错误消息是什么?