【问题标题】:is there any point in declaring that column as unique?声明该列是唯一的有什么意义吗?
【发布时间】:2011-07-09 17:35:05
【问题描述】:

当我对外引用一个表时,声明该列是唯一的有什么意义吗?

我的意思当然是我引用的那一列是独一无二的。

【问题讨论】:

    标签: mysql sql sql-server database performance


    【解决方案1】:

    是的,想象一下以下场景:

    表 1 的 id 字段是您的外键。这是一个唯一的索引。

    Table 1:
    ________________________  
    | id |  value | blah... |  
    |----|--------|---------|  
    | 0  |  val 1 | ....    |  
    |----|--------|---------|  
    | 1  |  val 2 | ....    |  
    |----|--------|---------|  
     ...    ...       ...
    

    现在表 2 有两种可能性。

    1) table_1_id 不是唯一的

    Table 2:
    _____________________________
    | id |  table_1_id | blah... |  
    |----|-------------|---------|  
    | 0  |      1      | ....    |  <------ Duplicates are okay!
    |----|-------------|---------|  <--/
    | 1  |      1      | ....    |  
    |----|-------------|---------|  
     ...    ...       ...
    

    2) table_1_id 是唯一的

    Table 2:
    _____________________________
    | id |  table_1_id | blah... |  
    |----|-------------|---------|  
    | 0  |      1      | ....    |  
    |----|-------------|---------|  
    | 1  |      n      | ....    |  <------- Cannot be 1, no duplicates
    |----|-------------|---------|  
     ...    ...       ...
    

    【讨论】:

      【解决方案2】:

      如果你希望它是唯一的,你就声明它是唯一的。

      【讨论】:

        【解决方案3】:

        多条记录可以引用另一个表中的单行,这是完全有效的数据库设计(1:M 关系)。所以问题是,第二个表中的字段是否应该是唯一的。从问题中并不清楚您的性能考虑是什么

        【讨论】:

          【解决方案4】:

          正如@yi_H 所说,创建唯一约束通常是为了执行管理数据的规则。然而,由于唯一约束等同于唯一索引,因此创建它们有一些优点和缺点。字段上的索引将需要更多时间来执行对该字段的插入或更新,因为需要检查索引是否重复和更新。索引也会增加表的大小。在专业方面,如果您根据该字段的值(即WHERE myUniqueField = 5JOIN myTable ON myUniqueField = someOtherIndexedField)执行查询,这些查询将运行得更快,因为它们可以执行索引查找而不是扫描。这些注意事项仅在您拥有大量数据或需要快速运行大量查询时才会发挥作用。所以一般来说,如果您有一个应该唯一的字段,请将其设置为唯一的。

          【讨论】:

            猜你喜欢
            • 2012-09-23
            • 1970-01-01
            • 2011-07-19
            • 2016-12-09
            • 2016-11-11
            • 1970-01-01
            • 1970-01-01
            • 2014-09-20
            相关资源
            最近更新 更多