1

我有一张表格,其中包含我可以在许多地方拥有的物品、文章的信息。例如,我可以将物品放在仓库或商店中。所以我有一个带有商店信息的表格和一个带有仓库信息的表格。

将物品与可能的位置联系起来的最佳方法是什么?

我认为一个选项是在表项中有两个外键,一个用于商店,另一个用于仓库。如果我在店里有 FK,那么仓库的 FK 必须为空。如果将来该项目可以在其他位置,我可以在项目表中添加新字段。

但是当我想显示信息时,我必须检查哪个FK不为空并显示具体位置的信息。但是如果我使用视图来显示项目的信息和位置的主要信息,我有很多字段为空,因为不是项目所在的位置。

但这是最好的方法吗?还有其他选择还是这是最正确的方法?

谢谢。

4

2 回答 2

1

我认为一个选项是在表项中有两个外键,一个用于商店,另一个用于仓库。

这是一个合法的解决方案,当您只能链接到几种位置时应该可以正常工作。但如果有(或将来可能有)多种位置,请考虑这样做:

在此处输入图像描述

该符号在此处输入图像描述表示继承(又名类别、子类型、子类化、泛化层次结构等)。请在ERwin 方法指南中搜索“子类型关系”以获取更多信息,并查看这篇文章以了解有关物理数据库中可能的实施策略的一些详细信息。

另见这篇文章这篇文章

但是如果我使用视图来显示项目的信息和位置的主要信息,我有很多字段为空,因为不是项目所在的位置。

没有什么可以帮助你。如果两条数据具有不同的结构,您就不能盲目地将它们“强制”成统一的行。要么留下一些可选的字段(就像你已经做的那样),或者只获取公共字段(如果你可以忍受的话),或者只是为每种位置使用单独的查询/视图 - 没有规则说你必须得到一切都在一个单一的数据库往返1


1实际上,根据您的客户端库,您实际上可能能够在单个数据库往返中打包多个逻辑独立的查询。

于 2013-04-08T20:44:30.793 回答
1

听起来您应该有一个位置表,然后让该项目通过外键包含对该表的引用。

Item
-----------
ItemId (PK)
ItemName
LocationId (FK)

Location
-----------
LocationId (PK)
LocationName
于 2013-04-08T20:45:56.617 回答