Стандарт именования для INCLUDE индексов? - PullRequest
1 голос
/ 11 ноября 2009

Мы используем довольно простой стандарт именования для индексов, который я могу проверять программно, но я борюсь с именами индексов с помощью столбцов INCLUDE. Если я делаю это на основе простой формулы, слишком легко создавать слишком длинные имена. Тогда моя программная проверка не пройдена, и я получаю усеченные имена.

Для тех из вас, кто использует столбцы INCLUDE, вы придумали стандарт именования, который вас устраивает? Если это так, пожалуйста, поделитесь.

Мой текущий стандарт, который меня не устраивает:

IX_<tableName>_<column1>_..._<columnN>_wIncl (wIncl переводится как «с включением»)

Проблема в том, что нет указаний на то, какие столбцы включены.

Ответы [ 2 ]

2 голосов
/ 11 ноября 2009

Я бы не стал добавлять всю эту информацию к имени индекса ...

Что у меня обычно есть

  • 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 голос
/ 11 ноября 2009

Если вы действительно хотите включить имена столбцов в имя индекса, вы можете просто использовать ту же структуру именования столбцов:

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

Если это слишком долго, то для включенных столбцов вы можете использовать порядковый номер вместо имени. (Или, может быть, вы можете выяснить, почему вы включаете так много столбцов, что вы превышаете длину идентификатора, или стандарты ваших имен столбцов слишком многословны).

Однако вы всегда можете получить включенные столбцы из представлений каталога, поэтому я не уверен, почему вы хотите быть столь явными в одном только имени. Я не помню сценария, в котором я всегда и абсолютно хотел узнать все возможные детали об индексе, взглянув на одно только имя. Для включенных столбцов я думаю, что их можно искать вручную, когда вы находитесь в ситуации «необходимости знать».

...