Sql server 包含索引的命名标准?

Sql server 包含索引的命名标准?,sql-server,naming-conventions,standards,indexing,Sql Server,Naming Conventions,Standards,Indexing,我们对索引使用了一个相当简单的命名标准,我可以通过编程方式进行验证,但我很难用INCLUDE列来命名索引。如果我根据一个简单的公式来做,那么很容易构建太长的名称。然后,我的编程验证失败,最后我的名字被截断了 对于那些使用INCLUDE列的用户,您是否提出了自己满意的命名标准?如果是,请分享 我目前不满意的标准是: IX_uuuuuuuuuuuuuuuuuuuuwincl(wIncl翻译为“包含”) 问题是没有关于包含哪些列的指示。我不会真的将所有这些信息添加到索引名中 我通常吃的是 主键索引的

我们对索引使用了一个相当简单的命名标准,我可以通过编程方式进行验证,但我很难用INCLUDE列来命名索引。如果我根据一个简单的公式来做,那么很容易构建太长的名称。然后,我的编程验证失败,最后我的名字被截断了

对于那些使用INCLUDE列的用户,您是否提出了自己满意的命名标准?如果是,请分享

我目前不满意的标准是:

IX_uuuuuuuuuuuuuuuuuuuuwincl
wIncl
翻译为“包含”)


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

我不会真的将所有这些信息添加到索引名中

我通常吃的是

  • 主键索引的主键(表)
  • IXnn(表)\uxname(索引名)
    用于常规非聚集索引
  • UIXnn_uxnn(表)xnn(索引名)
    用于常规非聚集唯一索引
  • CIXnn_u1;(表)1;(索引名)
    用于聚集唯一索引(如果与主键不同)
这对于我的例子来说已经足够好了——如果你想特别指出一个非聚集索引也包含了列,你可能想想出一个新的前缀(而不是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)'

Marc

如果您确实想在索引名中包含列名,只需使用相同的列命名结构即可:

IX_<table>_<col1>..._...<colN>_INCL_<col1>..._...<colN>
IX_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。。。
如果这太长,那么对于包含的列,可以使用序号而不是名称。(或者,您可以调查为什么包含的列太多,超过了标识符长度,或者列命名标准是否过于冗长)

但是,您总是可以从目录视图中获取包含的列,因此我不确定您为什么希望仅在名称中如此明确。我不记得有过这样一种情况:我总是绝对希望通过单独查看名称来了解索引的所有可能细节。对于包含的列,我认为在“需要知道”的情况下手动查找它们是可以的