INCLUDE 索引的命名标准是什么?

3
我们对索引使用了一个相当简单的命名标准,我可以通过编程验证其有效性,但是我在为包含列命名索引方面遇到了困难。如果基于一个简单的公式进行命名,那么很容易构建出过长的名称。然后我的程序验证失败,并且我最终得到了被截断的名称。
对于那些使用包含列的人,你们是否已经想出了满意的命名标准?如果有,请分享一下。
我目前不满意的标准如下: IX_<tableName>_<column1>_..._<columnN>_wInclwIncl 表示“包括”)
问题在于没有指示哪些列被包括在内。
2个回答

3
我不会在索引名称中添加所有这些信息...
我通常使用以下格式:
  • 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

如果您真的想在索引名称中包含列名,您可以简单地使用相同的列命名结构:

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接