演员和接收者之间的实体关系

时间:2012-09-13 15:00:27

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

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

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

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

现在虽然这可能起作用,但问题出现了dupes表正在接收已删除的记录,即使它们没有被删除,因为它们是欺骗性的。这是一个问题,因为即使我决定仅仅因为我不喜欢它而从persons表中删除某个人,他们也会存储在dupes表中。

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

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

2 个答案:

答案 0 :(得分:1)

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

IMO,理论关系很复杂,因为即使删除了欺骗行为,也应该保留记录。

答案 1 :(得分:0)

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