2009-11-11 44 views
1

我们对索引使用了一种相当直接的命名标准,我可以通过编程来进行验证,但是我正在使用INCLUDE列来命名索引。如果我根据一个简单的公式来完成,那么过于容易地构建名称太长的名称。然后我的程序验证失败了,最后我截掉了名字。INCLUDE索引的命名标准?

对于那些使用INCLUDE列的人,你有没有想到一个你满意的命名标准?如果是这样,请分享。

我现在的标准,我不是很满意:

IX_<tableName>_<column1>_..._<columnN>_wInclwIncl意为“与包括”)

的问题是,有没有都包含哪些列指示。

回答

2

我不会真的添加所有这些信息索引名称...

我通常有是

  • PK_(table)主键索引
  • IXnn_(table)_(indexname)定期非聚集索引
  • UIXnn_(table)_(indexname)对于常规非聚类唯一索引
  • CIXnn_(table)_(indexname) for clus (如果它与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

如果你真的想包括在指标名的列名,你可以简单地使用相同的列命名结构:

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

如果过长,则对于包含的列,你可以使用序号inste名称广告。 (或者,也许你可以调查为什么你包括那么多的列,你超过了标识符的长度,或者你的列命名标准是否过于冗长)。

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