我们使用一个相当简单的索引命名标准,我可以通过编程方式验证,但我正在努力使用INCLUDE列命名索引。如果我基于一个简单的公式来做,那么构建太长的名称就太容易了。然后我的程序化验证失败了,我最终得到了截断的名字。
对于那些使用INCLUDE列的人,您是否想出了一个您满意的命名标准?如果是,请分享。
我目前的标准,我不满意:
IX_<tableName>_<column1>_..._<columnN>_wIncl
(wIncl
翻译为“with include”)
问题在于没有包含哪些列的指示。
答案 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>
如果这个太长,那么对于包含的列,您可以使用序号而不是名称。 (或者您可以调查为什么要包含超出标识符长度的列数,或者列命名标准是否过于冗长)。
但是,您始终可以从目录视图中获取包含的列,因此我不确定为什么您希望仅在名称中明确这样。我不记得一个场景,我总是想通过单独查看名称来了解索引的每个可能的细节。对于包含的列,我认为当您处于“需要知道”状态时,可以手动查找它们。