【发布时间】:2012-05-28 06:59:45
【问题描述】:
我正在尝试解决一个问题,但很难找到最佳解决方案。我有一个数据库,其中包含(除其他外)以下内容的表:
- 目标请求
- 支持请求
- 交换请求
- 存款申请
这些表中的每一个都有一个 cmets 列(从最终用户到管理员),但是我被要求添加向所有这些请求添加注释的功能。我希望每组笔记都是分开的,这样我就可以跟踪添加笔记的日期/时间,以及谁编辑了它。这表明我需要将注释存储在表格中,并通过外键链接回请求。问题是每个请求表都有一个自动递增的 id 列,该列在该表中是唯一的,但对于所有其他表来说不是唯一的(这意味着每个表都可以有一个 id 为 200 的请求)。
我意识到我的问题的一个解决方案可能是为每种类型的请求创建一个“Notes”表并相应地创建外键,但这肯定不是解决问题的唯一体面方法。
我真正想知道的是是否有一种有效的方法可以使用 id 和请求类型(基本上是表名)来创建外键。这可能吗?
【问题讨论】:
-
除了 ID 和 cmets 之外,这些表是否有任何共同的属性?
-
一般来说,将元数据与真实数据一起存储是个坏主意。将参考表与参考 ID 一起存储不会像拥有多个表那样工作。
-
@Keyser:它们每个都有一个指向 User 表的外键,并且它们每个都有一个 RequestDate 和 RequestStatus(我想它们都有一个 RequestID),但除此之外,它们的存储非常棒不同的数据。
-
@JNK:我大部分同意。我只是想知道是否有另一种解决方案可以提供公平的数据完整性并为我节省 3 或 4 个表来管理。
-
@BrendonDugan 最好有更多的桌子。考虑您的源表更改的可能性 - 假设您出于必要向
Destination的键添加另一个字段 - 您需要以非常复杂的方式重建整个 cmets 表。
标签: sql sql-server database-design foreign-keys ddl