删除主键最佳实践

时间:2014-05-19 10:29:39

标签: sql oracle primary-key

我获得了一个系统,该系统有一个表来跟踪每周更改客户数据的变化。每周记录使用customer_id和关联的action_id为新的file_id号创建,这将是更新“U”。它有以下主键。

ALTER TABLE t_customer_file
ADD CONSTRAINT CUSTF_PK PRIMARY KEY (file_id, customer_id, action_id);

现在需要进行更改,以便客户更新可以在一周内出现两次。因此,file_id,customer_id和action_id将是相同的,因此主键使程序包无法填充此表。

所以我只是想知道删除和引入新主键或没有主键的最佳做法是什么?

目前我丢弃了主键。然后我用一个索引代替相同名称的相同字段。我会创建一个包含更多列的新主键,但表中只有5列,每个列只包含已更新的数据。以下是我为获得重复行而执行的操作,并编译了一个使用t_customer_file数据的视图。

alter table t_customer_file
drop constraint CUSTF_PK
drop index;

create index CUSTF_PK on t_customer_file (file_id,customer_id,action_id);

alter view customer_file compile;

在这种情况下,有关最佳做法的任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

我会添加一个新列“id”作为主键,更改应用程序逻辑以接受file_id,customer_id和action_id组合的多个记录。添加file_id,customer_id和action_id的索引很好。我过去从stackoverflow得到的一个好建议是每个表都应该有一个不代表应用程序数据的主键。因此,添加一个新的主键列“id”(其目的是使列唯一)是可以的。

alter table t_customer_file add (id number(22) primary key)

您也可以按此新ID进行排序,或者您可以在上面的评论中为此提及添加日期/时间戳列。