我正在为公司创建一个简单的内部资产跟踪应用程序。目前,我们通过excel(糟糕)来执行此操作。我将其分解为:
资产/项目-工具,硬件,零件等。 站点-所在的总体位置:设施A,站点位置B Bin-资产所在的子位置,可以是建筑物,工具箱或板条箱。
垃圾箱给我带来了麻烦,因为一个项目可以放置在没有垃圾箱的站点上,或者一个垃圾箱可以位于另一个垃圾箱内,我尚不确定构建此数据库的最佳方法。
我尝试过使用多个外键,但是这样会很混乱或至少有感觉。我还尝试过使用列出的here替代Django的GenericForeign Keys的替代方法,我之前在微妙的不同应用程序中使用了它们,但自引用却使我感到困惑。最后,我希望能够在站点上收集项目列表,然后为每个工具箱及其内部的项目缩进一行,是否有一种很好的方法来设置模型,以便能做到这一点?
答案 0 :(得分:1)
您可能要考虑两种观点:1.模型是否易于阅读,非冗余且与您的问题一致; 2.您希望在模型上运行哪种查询。
您已经考虑过第一个方面。关于第二个,我相信您要执行的一些查询是: 1.列出资产并链接其位置。 2.计算一个地点的资产 3.导航位置层次结构,并列出每个位置的所有资产
上面的建议您为包含建筑物,垃圾箱等的位置创建一个模型,并通过字段location_type区分它们,该字段可能是字典表(id,name)的外键。那么您将需要一个将Foreign_key自己引用到父位置的自我来创建层次结构。
这样,您将有一个外键指向资产中的位置,并且给定了位置,您可以直接查询asset_set。任何其他模型都不太透明。可以使用@property
方法来解决任何差异,例如要保存特定于建筑的字段,您可以创建一种方法,该方法首先检查类型是否正确,然后将值保存到char_field_1
上述内容的一种变体。如果Bin
,Building
等的属性太多且不同,无法合并到一个表中。然后,您可以为每个模型创建单独的模型,并从“位置”到每个模型都有一个可为空的一对一字段。保存后,可以检查是否已填充一个或多个。