我有一个带有Access前端的SQL Server数据库,我需要用户能够一次为多个项目分配资源。例如,我们有一个特定零件的库存,用于许多机械组件,我们需要将这些零件分配给特定的组件进行生产。
人们通常如何用这些要求代表数据?
目前我的数据存储如下:
Resource | A | B | C (etc.)
---------+-------+-------+------
a | 10 | 20 | NULL
b | 11 | NULL | 31
c | 12 | NULL | NULL
d | NULL | 40 | NULL
其中A,B,C是不同的项目。
优点:
缺点:
替代
在我看来,更多的标准是'表示将是如下表格。但是,我发现或多或少不可能以一种允许在多个项目上轻松实现可视化和资源分配的方式向用户呈现这一点。
ID | Project | Resource | Quantity
-----+---------+----------+----------
1 | A | a | 10
2 | A | b | 11
3 | A | c | 12
4 | B | a | 20
5 | B | d | 40
6 | C | b | 31
优点:
缺点:
e.g。
-- 'Resources' table has resource ID as primary key (& other info about resource),
-- 'ProjectResources' is the 'standard' table above
SELECT ResourceTable.ID, ProjA.Quantity AS A, ProjB.Quantity AS B, ProjC.Quantity AS C
FROM Resources
LEFT JOIN (SELECT ProjectResources.Quantity, ProjectResources.Resource
FROM ProjectResources
WHERE ProjectResources.Project = 'A') AS ProjA
ON Resources.ID = ProjA.Resource
LEFT JOIN (SELECT ProjectResources.Quantity, ProjectResources.Resource
FROM ProjectResources
WHERE ProjectResources.Project = 'B') AS ProjB
ON Resources.ID = ProjB.Resource
LEFT JOIN (SELECT ProjectResources.Quantity, ProjectResources.Resource
FROM ProjectResources
WHERE ProjectResources.Project = 'C') AS ProjC
ON Resources.ID = ProjC.Resource
上述两个选项都要求前端可以处理不同数量的表列,这有点尴尬,但在第二种情况下,此要求仅限于特定情况。
关于如何表示这些数据并允许我错过的简单编辑还有其他选项吗?
答案 0 :(得分:0)
由于您列出的原因,您不希望使用当前的数据库架构。您可能最好使架构变得合理,然后在UI中处理视图,而不是生成适合特定视图的错误架构(如果您也想要其他视图,那么您将回到同一个桶中用于新视图的模式。)
虽然可以在Access中将视图生成为交叉表查询,但您将无法对其进行编辑(与查询相同;您实际上是在那里手动构建交叉表查询)。
一个潜在的解决方案是在前端生成一个临时表,将所需项目作为列(可能是所有项目的子集),使用真实表中的资源数据填充它并将其显示为数据表。它是可编辑的,您可以将更改写回真实表。它需要编码,但它解决了缺点。