2010-08-09 3 views
4

Мне нужно работать с базой данных, чтобы делать отчетность БД довольно большая: 416 055 104 строки Каждая строка очень светлая, но только логическая и int id.Добавить первичный ключ в таблицу с существующим кластеризованным индексом

Каждая строка идентифицируется тремя столбцами, но, к моему удивлению, на ней нет первичного ключа. Только кластерный индекс с уникальным ограничением.

Зная это, у меня есть 2 вопроса.

  1. Может ли быть ЛЮБАЯ причина?
  2. Есть ли способ превратить это в первичный ключ.

Что касается вопроса 2

Создания нового первичного ключа также создает некластеризованную индекс ассоциировать с (есть уже существующий кластер один).
Это не, что я ищу. Я хочу сохранить тот же самый индекс, но также сделать его первичным ключом.

  • Возможно ли это?
  • Будет ли это быстрее, если снова создать весь индекс? (Надеюсь, так)
  • В чем могут быть последствия? (Замки? Зависла? Поврежденные данные?)

ответ

1

Существует небольшое различие между PRIMARY KEY и ограничением UNIQUE для столбцов с нулевым значением. Поэтому, если столбцы, о которых идет речь, не имеют значения NULL, я предлагаю вам ничего не делать. Основная причина внесения ключа кандидата в первичный ключ - если у вас есть программное обеспечение (например, инструмент моделирования данных или другой инструмент разработки), который ожидает, что ключ будет идентифицирован с ограничением PRIMARY KEY.

+0

Вот что я в итоге делаю. Это отношение не является обязательным для ORM. Я могу просто написать linq-запрос с соединением, это не будет такой проблемой после всего. –

1
  1. Уникальный индекс может позволить нулевые значения . Первичный ключ не может.

  2. Я считаю, что вы не можете «пометить» существующий индекс как первичный ключ. Вам придется бросить его и воссоздать. Чтобы избежать лишних вещей, я бы сказал, что было бы полезно разместить TABLOCKX, HOLDLOCK на столе, прежде чем делать это.

+0

Я не знаю, как они установлены, я подумал, что, возможно, это два разных элемента, и что первичный ключ будет «ссылаться» на используемый им индекс .. тогда это будет просто вопрос создания ПК и скажите ему использовать существующий. И ORM редко играют хорошо без ПК ... –

1

Хороший вопрос.

Если у вас уже есть уникальный индекс для столбцов с нулевым значением, у вас есть ключ-кандидат. Я не знаю какой-либо особой выгоды сделать это «официальным» первичным ключом. На самом деле у меня такое чувство, что не сделать его ПК, даст большую гибкость.

+0

Ну, если у меня нет реального первичного ключа, я не могу создавать внешние ключи ... –

+2

@Stephane - Да, вы можете. Требование состоит в том, что в ссылочной таблице есть уникальное ограничение, а не первичный ключ. –

+0

Уникальные ограничения в таблице. Я хочу, чтобы PK состоял из 3 столбцов (DocId, CatId, SysId), в то время как у меня есть только DocId в таблице, в которой мне нужен внешний ключ. На самом деле я не уверен, что ПК заставит его работать. –

 Смежные вопросы

  • Нет связанных вопросов^_^