SQL Server 2008: когда я НЕ могу изменить структуру таблицы? Когда я не могу удалить строку? - PullRequest
2 голосов
/ 05 июня 2009

Пару лет назад я работал в компании, которая нуждалась в базе данных Access, предназначенной для их продаж и ведения учета. Одна вещь, которая беспокоила меня в течение того лета, была иногда невозможностью изменить тип данных столбца, удалить столбец или удалить строку (запись). И, если мне не изменяет память (это было пять лет назад), я думаю, что иногда я копировал целые таблицы данных, воссоздавал таблицу с желаемым изменением и затем копировал ее обратно. Честно говоря, вероятно, большинство проблем, которые у меня были был связан с моим крайним отсутствием знаний о дизайне БД в то время, и я, вероятно, пытался изменить то, что вы, очевидно, не должны. Однако в этот раз я стараюсь избежать тех же проблем.

Этим летом я работаю в MS SQL Server 2008 Developer и снова собираюсь разработать значительную систему БД. Итак, когда я продолжу в этом вопросе, мой вопрос: что я не смогу вернуться и изменить позже? В частности, я знаю, что большинство ограничений возникает в отношении первичных / внешних ключей, поэтому на что мне следует обращать внимание при разработке?

Например:

  1. Могу ли я изменить тип данных первичного ключа? Что если на него есть ссылка в другой таблице?
  2. Могу ли я изменить первичный ключ? А если на него есть ссылка в другой таблице?

С какими еще очевидными ограничениями я могу столкнуться, о которых мне следует знать? Извините, если это кажется очевидным / глупым вопросом, но я думаю, что многие начинающие должны знать ответ на этот вопрос - и я один из них!

Спасибо!

Ответы [ 3 ]

4 голосов
/ 05 июня 2009

В SQL 2008 Management Studio вы можете включить опцию в Сервис -> Параметры, которая не позволит вам сохранить любые изменения, требующие перестроения таблицы. Затем вы можете создать базу данных, попробовать несколько операций и посмотреть, какие из них работают, а какие нет.

Я не являюсь экспертом по SQL, поэтому я не знаю всех случаев, когда требуется перестроение таблицы, но я знаю, что переупорядочивание столбцов (включая добавление нового столбца в любом месте, кроме конца таблицы ) требует восстановления.

Edit:

Две другие вещи, которые я знаю об этом, становятся огромной болью - это UDT и UDF, которые "привязаны к схеме". Вы не можете изменить эти вещи, когда другие объекты ссылаются на них.

4 голосов
/ 05 июня 2009

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

Также следует помнить, что тип данных PK и FK должен точно совпадать (то есть, bigint к bigint, smallint к smallint, не bigint к smallint)

1- Изменение первичного ключа таблицы является нетривиальной задачей, если вы не используете инструмент. Если вы используете менеджер предприятия и измените ключ, а затем щелкните, чтобы показать сценарий, вы увидите, что все ограничения удаляются, резервное копирование целевой таблицы, затем создается новая таблица и все восстанавливается. Если данные в старом первичном ключе не преобразуются или впоследствии не являются уникальными, мы надеемся, что все откатится гладко.

2- Те же практические результаты

Когда вы не можете удалить строки? Вы не можете удалить из таблицы PK, пока все соответствующие строки в таблицах FK не будут изменены или удалены. Чтобы удалить Техас из таблицы штатов, вам нужно обновить все записи заказа на новое действительное название штата или удалить их.

0 голосов
/ 05 декабря 2012

Откройте SQL Server Management Studio и войдите в систему, используя учетную запись аутентификации SQLserver sa, *****. Далее вы выполните следующие шаги.

Инструменты> Параметры> Конструкции> Запретить сохранение таблицы воссоздания | Снимите флажок.

Теперь вы можете вносить изменения в таблицы и сохранять их в представлении конструктора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...