INCLUDE索引的命名标准?

时间:2009-11-11 17:14:00

标签: sql-server naming-conventions standards indexing

我们使用一个相当简单的索引命名标准,我可以通过编程方式验证,但我正在努力使用INCLUDE列命名索引。如果我基于一个简单的公式来做,那么构建太长的名称就太容易了。然后我的程序化验证失败了,我最终得到了截断的名字。

对于那些使用INCLUDE列的人,您是否想出了一个您满意的命名标准?如果是,请分享。

我目前的标准,我不满意:

IX_<tableName>_<column1>_..._<columnN>_wInclwIncl翻译为“with include”)

问题在于没有包含哪些列的指示。

2 个答案:

答案 0 :(得分:2)

我不会真正将所有信息添加到索引名称...

我通常拥有的是

  • PK_(table)表示主键索引
  • IXnn_(table)_(indexname)用于常规非聚集索引
  • UIXnn_(table)_(indexname)用于常规非群集唯一索引
  • CIXnn_(table)_(indexname)用于群集唯一索引(如果它与PK不同)

这对我的案例来说已经足够了 - 如果你想明确指出非聚集索引也包含了列,你可能想要想出一个新的前缀(而不是IX) - 但我不会过分夸大并将所有包含的列添加到名称中 - 太多信息!

如果您需要查看索引中的列,以及它们是否包含列,请查询系统目录视图:

SELECT
    OBJECT_NAME(i.object_id) 'Table name',
    i.name 'Index name',
    i.type_desc 'Index type',
    i.is_unique ,
    i.is_primary_key ,
    i.is_unique_constraint ,
    c.Name 'Column name', 
    ic.is_included_column
FROM
    sys.indexes i 
INNER JOIN 
    sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
INNER JOIN 
    sys.columns c ON ic.column_id = c.column_id AND ic.object_id = c.object_id
WHERE
    i.Name = '(your index name in question)'

马克

答案 1 :(得分:1)

如果您确实希望在索引名称中包含列名,则只需使用相同的列命名结构:

IX_<table>_<col1>..._...<colN>_INCL_<col1>..._...<colN>

如果这个太长,那么对于包含的列,您可以使用序号而不是名称。 (或者您可以调查为什么要包含超出标识符长度的列数,或者列命名标准是否过于冗长)。

但是,您始终可以从目录视图中获取包含的列,因此我不确定为什么您希望仅在名称中明确这样。我不记得一个场景,我总是想通过单独查看名称来了解索引的每个可能的细节。对于包含的列,我认为当您处于“需要知道”状态时,可以手动查找它们。