2009-09-09 2 views
27

Какова цель назначения ваших ограничений (уникальный, первичный ключ, внешний ключ)?Какова цель ограничения имен

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

CREATE TABLE Order 
(
    LoginName  VARCHAR(50) NOT NULL, 
    ProductName  VARCHAR(50) NOT NULL, 
    NumberOrdered INT   NOT NULL, 
    OrderDateTime DATETIME  NOT NULL, 
    PRIMARY KEY(LoginName, OrderDateTime) 
); 

Какие преимущества (если таковые имеются) не называя моего ПК принести?

Например. Заменить:

PRIMARY KEY(LoginName, OrderDateTime) 

С:

CONSTRAINT Order_PK PRIMARY KEY(LoginName, OrderDateTime) 

Извините, если моя модель данных не является лучшим, я новичок в этом!

+1

Возможно, использовать имя для ссылки на ограничение позже .. например, когда вы хотите удалить \ отредактировать его? – Aziz

ответ

62

Вот несколько основных причин.

(1) Если запрос (вставка, обновление, удаление) нарушает ограничение, SQL будет генерировать сообщение об ошибке, которое будет содержать имя ограничения. Если имя ограничения является понятным и описательным, сообщение об ошибке будет легче понять; если имя ограничения является случайным ориентировочным именем, это намного менее понятно. Particulary для конечных пользователей, которые будут (нормально, могут) позвонить вам и спросить, что означает «FK__B__B_COL1__75435199».

(2) Если ограничение необходимо изменить в будущем (да, это так), это очень сложно сделать, если вы не знаете, как его зовут. (ALTER TABLE MyTable drop CONSTRAINT um ...) И если вы создаете несколько экземпляров базы данных «с нуля» и используете системные имена по умолчанию, ни одно из них не будет совпадать.

(3) Если человек, который получает поддержку вашего кода (aka DBA), должен тратить много бессмысленного времени на дело (1) или случай (2) в 3 часа ночи в воскресенье, они вполне вероятно в состоянии определить, откуда пришел код, и иметь возможность реагировать соответствующим образом.

+1

+1 охватывает все базы – gbn

4

Чтобы определить ограничение в будущем (например, вы хотите удалить его в будущем), оно должно иметь уникальное имя. Если вы не укажете имя для него, механизм базы данных, вероятно, присвоит вам странное имя (например, содержащее случайные материалы для обеспечения уникальности).

+0

Означает ли это, что присвоение имен используется только для того, чтобы люди могли легче идентифицировать ограничение? Другими словами, не имеет значения (или влиять) на СУБД каким-либо образом, называете ли вы ограничение или нет? Вы не можете использовать его в коде для какой-то цели? Извините, если это неясно. – Andrew

+1

Это просто имя. Название не влияет на функциональность. Если вы хотите в будущем ссылаться на него в коде, это, конечно, имеет значение. Это как сказать, имя переменной в коде. –

+1

Как и столбцы * имена * не имеют значения. Если они описывают, что они («ProductId» вместо «BJZ0_340» или «Fred»), они гораздо полезнее. –

1

Это помогает кому-то быстро узнать, какие ограничения делают, не глядя на фактическое ограничение, так как имя дает вам всю необходимую информацию.

Итак, я знаю, что это первичный ключ, уникальный ключ или ключ по умолчанию, а также таблица и, возможно, используемые столбцы.

3

Он держит администраторов баз данных счастливыми, поэтому они позволяют определять вашу схему в производственной базе данных.

+0

Ха-ха ... да, я думаю, это самая важная причина: P – Andrew

3

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

1

Правильно называя все ограничения, вы можете быстро связать определенное ограничение с нашей моделью данных. Это дает нам два реальных преимущества:

  1. Мы можем быстро выявить и исправить ошибки.
  2. Мы можем надежно модифицировать или отменить ограничения.
Смежные вопросы