【问题标题】:entity relationship between an actor and a receiver参与者和接收者之间的实体关系
【发布时间】:2012-09-06 17:09:54
【问题描述】:

所以我有一个 SQL 关系问题。假设我有一个数据库,我想在其中保存有关个人的信息记录。现在我已经设置了一个表格来获取这些信息。好的,到目前为止一切顺利。

通常可以在表中发现重复信息并将其删除。如果特定字段与另一行中的另一个字段具有相同的值,则记录被认为是重复的。示例:重复的电子邮件。

现在我想在数据库中创建另一个表来跟踪发现和删除的每个重复项。我的第一个想法是创建一个外键关系。所以我创建了一个dupes 表并将其连接到我的persons 表。该关系是一个简单的外键到主键的关系,带有一个删除约束。

虽然起初这可能有效,但出现的问题是dupes 表正在接收已删除的记录,即使它们没有被删除,因为它们是骗子。这是一个问题,因为即使我决定从persons 表中删除一个人只是因为我不喜欢他们,他们还是会存储在dupes 表中。

然后我想,为什么不在persons 表中创建一个disposition field,并将其作为唯一键或主键连接到我的dupes 表的索引外键。那么问题是唯一键必须具有唯一值,因此dupeI don't like you 的多个处置将不起作用。另一种选择是使disposition field 成为主键。不过这也有同样的问题。

解决这个问题的正确关系是什么?

【问题讨论】:

    标签: sql database-design foreign-keys relational-database entity-relationship


    【解决方案1】:

    我可以想到这个实现:删除触发器,带有“删除前”检查。删除前检查将确认被删除的记录是否重复。但不确定所有 RDBMS 系统都支持此类检查。

    IMO,理论上的关系很复杂,因为即使删除了重复项,也应该保留记录。

    【讨论】:

      【解决方案2】:

      外键不能解决这个问题。我发现了触发器及其正是我所需要的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-12
        • 2010-09-20
        • 2015-12-28
        • 1970-01-01
        • 1970-01-01
        • 2019-07-01
        • 1970-01-01
        相关资源
        最近更新 更多