MySql跨多个字段阻止/跟踪重复字段

时间:2013-04-11 22:15:39

标签: mysql sql unique

我正在寻找一种简单的方法来检查多个零件表,以确定在将它添加到给定表之前是否已存在给定的零件号。

我提出的当前最好的想法是一个辅助表,它只用一个唯一的密钥列出一列中所有表的每个PN;但是我想知道是否有办法在不创建新表和索引的情况下完成它?

对于视觉学习者类型,我有四十个表或多或少遵循这种模式的表:

表1

    |    id    |    PN     |    Other Columns    |  
    ----------------------------------------------  
    |    1     |  SomePn   |   ... ... ... ...   |
        ...

表2

    |    id    |    PN     |    Still Other Columns  |
    --------------------------------------------------
    |    1     |  OtherPn  |  ... ... ... ... ...    |
        ...

如上所述,大约有40多个列,每个表最多有50列和最多800万条记录。

目标是,通过软件(Java)或MySql拒绝记录,以防止重复的部件号跨越多个表。主PN表是唯一可行或合理的解决方案吗?

我知道数据结构不是最好的设计,并且正在进行返工,但我想知道一些建议的最佳实践以及针对此问题的建议解决方案。

1 个答案:

答案 0 :(得分:1)

添加表格是您的最佳选择。

表1:

|  t1_id   |    PN     |    Other Columns    |  
----------------------------------------------  
|    1     |  pn_id    |   ... ... ... ...   |
    ...

表2:

|  t2_id   |    PN     |    Other Columns    |  
----------------------------------------------  
|    1     |  pn_id    |   ... ... ... ...   |
    ...

表3:

|  pn_id   |  PN  |
------------------
|    1     |  ##  |
    ...

虽然在您的情况下这可能不是最容易实施的解决方案,但它是最好的整体解决方案,因为您现在或将来都不会出现扩展问题。如果您选择了一个解决方案,在更新/创建时检查所有表中的重复部件号,那么随着您的表变大,这将花费更长时间。

如果您可以保证它们永远不会变大或者您永远不会添加部件号,那么您可能只需编写一个脚本来检查重复项,而不必担心另一个表。但是,从长远来看,您只需要添加另一个表来跟踪零件编号。