sql-server - 将多个子表关联到一个父表

标签 sql-server database database-design

我会尽我最大的努力把它写成文字。本质上,我们有一个应用程序可以跟踪用户执行的操作。每个 Action 都有自己的表,因为每个 Action 都有不同的参数需要存储。这使我们能够存储这些额外的属性,并很容易地对多个或单个用户的操作进行分析。除了用户执行这些操作之外,这些操作并没有真正相互关联。

示例:

  • ActionTableA ID |用户名 |属性A |属性B
  • ActionTableB ID |用户名 |属性C |属性D |属性E
  • ActionTableC ID |用户名 |属性F

接下来,我们需要为用户执行的每个操作分配一个值,并保留这些值的运行总和。

例子: 值表: ID |用户名 |值(value) | Action 类型 | ActionId

将值表中的值与实际执行的操作相关联的最佳方式是什么?我们知道操作类型(A、B、C)——但从 SQL 设计的角度来看,我看不到在 ActionsTable 中的操作值与实际操作本身之间建立索引关系的好方法。唯一有意义的是将 ValueTable 修改为以下内容:

值表

编号 |用户名 |值(value) | Action 类型 | ActionAId(FK 可空) | ActionBId(FK 可空) | ActionCId(FK 可空)

但我遇到的问题是 3 个 actionTableId 列中只有一个有值,其余列为 Null。此外,随着操作类型的添加,值表中的列也会添加。最后,为了以编程方式查找数据,我要么 a) 必须检查 ActionType 以获得 Id 的适当列,要么 b) 扫描行并选择非空 actionId。

对于这个特定问题,是否有更好的方法/设计,或者这只是“现状”。

编辑

附件是上述设置的示意图:

enter image description here

对于清晰度问题,我们深表歉意,输入 SQL 问题总是很有挑战性。所以我认为您的评论让我想到了一些事情......我可以有一个 SystemActionId 表,它基本上具有自动生成的值

SystemActions:Id |类型

然后,每个 ActionTable 都会有一个额外的 FK 到 SystemAction 表。最后,在 ValueTable 中 - 也将其关联到 SystemActions 表。这将使我们能够将值(value)观与具体行动联系起来。我需要将操作表加入到系统操作表中

JOIN (((SystemActions.Id = ActionTableA.Id) JOIN (SystemActions.Id = ActionTableB.Id)) JOIN (SystemActions.Id = ActionTableC.Id)

蹩脚的快速 sql 语法

这就是您在下面的回答中暗示的内容吗?可能看起来像的快照:enter image description here

最佳答案

你的问题有点不清楚,但看起来你应该在每个操作表中都有一个(非规范化的)值列,或者在值表中有一个由每个单独的操作表键入的人工键。

关于sql-server - 将多个子表关联到一个父表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8737757/

相关文章:

sql - 如何检查某些表是否为空?

基于月份和日期的 SQL Server 生日列表

php - 在 php 7.2 中启用 pdo_sqlsrv,不工作

mysql - 多个 SELECT 语句的正确 mySQL 语法?

database-design - 包含 TB 及以上规模数据的 Elasticsearch 集群的推荐设置是什么?

sql-server - 在 SQL Server 中使用 casewhen 和子字符串时防止删除前导零

php - Zend Framework 1.9 从数据库查询中填充复选框

asp.net-mvc - ASP.net MVC 如何在不同的子域中同时运行同一个应用程序的多个实例?

database - 这是一个好的 table 设计吗?

复式记账系统的数据库设计