2013-04-22 118 views
0

我想分配一个主键,但有些数据是重复的?我们如何保留数据但仍然有主键?主键与重复数据?

+0

修复您的数据。不止一次存储相同信息的重点是什么? – sqlvogel 2013-04-22 14:52:04

+0

根据定义,主键列中的数据必须是唯一的 – 2016-04-21 20:23:21

回答

1

主键是一系列唯一值。所以你可以保留你的重复数据,或者你可以有一个主键,但不能同时存在。

或者,您可以使用代理键,方法是在表中添加ID列并从序列中填充它。当然,在这种情况下,“初级密钥”是没有意义的,因为你没有执行商业密钥的唯一性。但至少你可以欺骗自己,你有真正的完整性。

1

从我可以猜到,你有数据,你试图分配一个列作为主键,但数据具有重复值的列。

主键必须是唯一的。这就是数据库101.如果唯一可以作为主键的东西是重复的,那么您就不能正确地构建表格。

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 
); 

我必须然而,压力,虽然有可能,这通常是不好的设计!

2

我在17年的数据库工作中遇到这个问题的唯一原因是数据错误。一个客户已经输入了两次,使用相同的ID进入一个没有主键的表格。

当需要声明主键时,必须首先清除数据错误,以便能够将最逻辑的列用作主键。

因此,我的建议是查看表中的所有数据是否符合业务规则,以及检查业务规则是否暗示将此列用作主键。

0

主键是唯一的,所以如果你想在某个列中有重复的数据,同一列不能是该表的主要键。