我正在为我的公司设计一个数据库,以协助资产管理。我不是数据库管理员,但我以前在数据库方面有过一些经验。我们的资产被用于各种工作地点或仓库或供应商设施的现场。我的问题涉及处理表可以完成两个字段之一的情况的最佳实践。在我的情况下,资产可以在商店或工作。
我考虑处理这个问题的方式是添加一个标志字段,该标记字段指示资产是否处于工作状态。如果为真,那么JOB_ID列应该有一个值,SHOP_ID应该为null。如果是假的,则应该是相反的。这些ID将引用适当的作业表和车间表。
我的问题是,我是不是从正确的方向来处理这个问题?这些案例是否有最佳做法?我假设追踪库存远非一个新问题。
以下是资产表的模式,为了简洁起见排除了一些列:资产(ASSET_ID、IS_ON_JOB、JOB_ID、SHOP_ID)
发布于 2014-05-01 13:25:04
你的做法是合理的。在ASSET
表上设置一个check约束,以确保在任何时间点上都会精确设置一个外键。
标志是多余的,因为相同的信息是由哪个外键是NULL
捕获的。保留它只会增加应用程序的维护开销。最终它会变得不一致,然后你会有一个混乱的解决办法。
另一种设计是将来自SHOP
和JOB
的一些信息合并到LOCATION
表中。然后模式变成
ASSET(ASSET_ID, LOCATION_ID)
LOCATION(LOCATION_ID, NAME)
JOB(JOB_ID, LOCATION_ID)
SHOP(SHOP_ID, LOCATION_ID)
如您在问题中所述,在LOCATION
中为每个“作业站点或.仓库或供应商设施”放置一行。
https://dba.stackexchange.com/questions/64228
复制相似问题