Внешний ключ в SQL Server - какой стиль использовать? - PullRequest
0 голосов
/ 18 сентября 2018

В моей базе данных у меня есть следующий код

CREATE TABLE [Users]
(
     userID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
     Username VARCHAR(255),
     Password VARCHAR(255)
);

CREATE TABLE [Image]
(
    ImageID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
    Imagename VARCHAR,
    userID INT,

    FOREIGN KEY(userID) REFERENCES Users (userID)
);

Однако здесь, на stackOverflow и нескольких других сайтах, люди предлагают написать его так:

CREATE TABLE [Users]
(
    userID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
    Username VARCHAR(255),
    Password VARCHAR(255)
);

CREATE TABLE [Image]
(
    ImageID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
    Imagename VARCHAR,
    userID INT,

    CONSTRAINT fk_Users 
        FOREIGN KEY(userID) REFERENCES Users (userID)
);

У меня естьпопытался выполнить оба утверждения, и он, кажется, делает то же самое ..

Чего мне не хватает, в чем прикол CONSTRAINT fk_Users?

1 Ответ

0 голосов
/ 18 сентября 2018

Запись constraint позволяет вам назвать ограничение.

В общем, вы замечаете это, когда ограничение нарушается.Если у вас есть возможность назвать ограничение, сообщение об ошибке будет иметь больше смысла.

Например, это:

Оператор INSERT конфликтует с ограничением FOREIGN KEY "fk_image_userId",Конфликт произошел в базе данных «rextester», таблице «dbo.Users», столбце «userID».

Оператор был прерван.

более понятен, чем этот:

Оператор INSERT вступил в конфликт с ограничением FOREIGN KEY "FK__Image__userID__09211CD4".Конфликт произошел в базе данных «rextester», таблице «dbo.Users», столбце «userID».

Оператор завершен.

Кроме того, используется имя ограниченияв alter table при удалении или отключении ограничения, поэтому наличие разумно названного ограничения делает это проще.

...