我正在尝试分配主键,但有些数据是重复的?我们如何保留数据但仍有主键?
答案 0 :(得分:2)
我在17年的数据库工作中遇到这种情况的唯一一次是由于数据中的错误。已将两个具有相同ID的客户输入到没有主键的表中。
当需要声明主键时,必须首先清除数据错误,以便能够使用最逻辑的列作为主键。
所以我的建议是查看表中的所有数据是否符合业务规则,以及检查业务规则是否暗示使用此列作为主键。
答案 1 :(得分:1)
主键是一系列唯一值。因此,您可以保留重复数据,也可以拥有主键,但不能同时拥有两个主键。
或者,您可以使用代理键,方法是向表中添加ID列并从序列中填充它。当然,在这种情况下,“primaruy密钥”是没有意义的,因为您没有强制执行业务密钥的唯一性。但至少你可以欺骗自己,你有真实的诚信。
答案 2 :(得分:1)
根据我的猜测,您有数据,并且您尝试将列指定为主键,但数据具有该列的重复值。
主键必须是唯一的。这是数据库101.如果作为主键的唯一东西是重复,那么你就不能正确构建表。
答案 3 :(得分:1)
您可以在要约束的列上手动创建非唯一索引,然后使用novalidate
子句添加主键约束,例如:
create table t1 (x number);
insert into t1 (x) values (1);
insert into t1 (x) values (1);
commit;
create index t1_pk on t1 (x);
alter table t1 add (
constraint t1_pk primary key (x) novalidate
);
但我必须强调,尽管可能,这通常是糟糕的设计!
答案 4 :(得分:0)
主键是唯一的,因此如果您希望某个列中包含重复数据,则该列不能是该表的主要数据。