【问题标题】:Preventing Duplicate records in MySQL防止 MySQL 中的重复记录
【发布时间】:2015-12-04 14:52:53
【问题描述】:

我目前正在研究一种进化算法,该算法将尝试为给定问题找到最佳参数配置。

我正在尝试在 MySQL 表中创建记录,该表将存储配置,其中每个参数都将表示为表列。如果已经尝试过配置,那么我想防止它被复制。

是否有在数据库/ORM 级别执行此操作的机制,或者我应该创建编程逻辑以防止重复条目?

【问题讨论】:

  • 在表中的相关字段上设置唯一键?
  • 唯一性将是所有列的组合。我不认为主键就足够了。在确定是否已尝试配置时,必须对所有列进行查找。
  • 这是唯一键的作用。 alter table foo add unique key (field1, field2, ..., fieldN)。毕竟,键中可以有多个字段...
  • N 可以很大。把自己打晕。

标签: mysql entity-framework duplicate-removal duplicate-data


【解决方案1】:

有没有一种机制可以在数据库/ORM 级别做到这一点

是的,在创建表时将Configuration 列声明或定义为Primary KeyUnique Key 以避免重复。

我提到了configuration 列,因为我不确定您的表结构,但如果它涉及多个列,那么您可以始终将其设为复合键。为什么您担心密钥查找。如果您使用适当的索引正确设计表格,那么您不必担心这一点。

假设您的col1, col2, col3, col4 是配置的一部分,并且您希望它们是独一无二的。然后将它们作为复合主键说

primary key (col1, col2, col3, col4)

【讨论】:

  • Rahul,我认为这是不对的,唯一性将是所有列的组合。主键是不够的,因为在确定是否已经尝试过配置时,必须对所有列进行查找。
  • @PrimeByDesign,我提到了configuration 列,因为我不确定您的表结构,但如果它涉及多个列,那么您可以始终将其设为复合键。为什么您担心密钥查找。如果您使用适当的索引正确设计表格,那么您不必担心。
  • 那么是什么阻止我使用不同的主键存储重复的配置? @Rahul
  • @PrimeByDesign,按 DBMS 概念,每个表只能有一个 PK,因此这是不可能的。不是吗?
  • @PrimeByDesign,你搞糊涂了。这就是我所说的,将所有涉及的列定义或制作为复合主键,数据库引擎将确保它们的唯一性。考虑阅读有关主键的更多信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 2015-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多