【发布时间】:2012-01-25 05:01:28
【问题描述】:
我一直在纠结如何指出数据库中的某条记录是“后备”或默认条目。我也一直在努力解决如何将我的问题简化为一个简单的问题陈述。我将不得不提供一个例子。
假设您正在构建一个非常简单的运输应用程序。您将接受订单并需要决定从哪个仓库发货。
假设您有几个城市拥有自己的专用仓库*;如果订单来自其中一个城市,您将从该城市的仓库发货。如果订单来自任何其他城市,您想从某个其他仓库发货。我们将某个其他仓库称为后备仓库。
您可能会决定这样的架构:
Warehouses
WarehouseId
Name
WarehouseCities
WarehouseId
CityName
解决方案必须强制执行零个或一个后备仓库。
如果没有为相关城市指定任何仓库,您需要一种方法来指明应该使用哪个仓库。如果它真的很重要,您可以在 SQL Server 2008 上执行此操作。
编辑:明确地说,所有有效城市都不存在于 WarehouseCities 表中。可能会收到未在 WarehouseCities 中列出的城市的订单。在这种情况下,我们需要能够选择回退仓库。
如果允许任意数量的默认仓库,或者如果我将默认仓库分配给例如州,我将使用 DefaultWarehouse 表。我可以在这里使用这样的表格,但我需要将其限制为恰好一行,这感觉不对。
您将如何指示后备仓库?
*当然,在这个例子中,我们排除了可能存在多个同名城市的可能性。您正在为其构建此应用程序的国家/地区对所有城市名称严格执行唯一性约束。
【问题讨论】:
-
什么版本的 SQL Server? 2008 年?
-
我很惊讶这很重要。我希望避免需要特定版本的 SQL Server 的深奥解决方案;感觉不像是需要独占功能的问题。也就是说,现在是 2008 年。我会更新标签和问题。
-
fyi ...我认为这是 SQL 中常见设计问题的有效问题 - +1。此外,它并不深奥,但我立即想到了在 sql 2008 中添加的过滤索引。
-
@davidmontoyago - 过滤索引可能是过去需要触发器的强制 DRI/唯一性的一种非常相关的方式。我们只在 sql 2008 中得到过滤索引。
-
@davidmontoyago - 平台可能与问题无关,但与解决方案高度相关。
标签: sql-server database sql-server-2008