Gaurav Dixit Ответов: 3

В чем разница между ключом и ограничениями в SQL или уникальным ключом против уникальных ограничений ?


Привет ребята ,
я пытаюсь узнать какую-то основную вещь, которую мы на самом деле использовали много времени . я хочу знать, есть ли какая-то разница между ключом и ограничениями в SQL . Поскольку мы часто используем такие термины , как уникальный ключ , уникальные ограничения или первичный ключ, первичное ограничение . я попытался создать это, и то, что я понимаю, первичный ключ или первичные ограничения одинаковы, а также уникальный ключ и уникальные ограничения также одинаковы . Я тоже погуглил . но я почти не сомневаюсь, действительно ли они одинаковы или между ними есть какая-то разница .
если я создаю первичный ключ, то я буду использовать это -
alter table employees
Add  primary Key(employeeId)


и я могу сделать также Вот так -
alter table employees
Add constraint Pk_Employee_IDD primary Key(employeeId)


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

Что я уже пробовал:

я уже пробовал эту штуку с помощью запроса -

alter table employees
Add  primary Key(employeeId)


а также это -

alter table employees
Add constraint Pk_Employee_IDD primary Key(employeeId)

3 Ответов

Рейтинг:
27

jgakenhe

Они похожи, но не совсем одно и то же. Ни один из них не будет создавать ограничения самостоятельно в папке ограничений. При использовании первичного ключа в таблице в SQL Server можно либо добавить предложение ограничения, либо нет. Если вы этого не сделаете, SQL Server автоматически создаст ограничение; считайте, что это внутренний короткий путь. SQL Server будет управлять этим сокращением для вас, используя кластеризованный индекс на первичном ключе; он автоматически установит уникальное ограничение на первичный ключ и не позволит первичному ключу быть нулевым.

CREATE TABLE Employee
(
  EmployeeID INT PRIMARY KEY,
  SSN varchar(9) NOT NULL
);

Если вы добавите предложение constraint, у вас будет больше возможностей управлять первичным ключом; например, иметь многоколоночный первичный ключ или даже иметь другой тип индекса для первичного ключа. Теперь, если вы добавите ограничение с индексом, кластеризованным или некластеризованным,то это ограничение попадет в папку keys. Если вы создадите ограничение, которое не использует индекс,то оно будет помещено в папку constraints.
CREATE TABLE Employee
(
  EmployeeID INT NOT NULL,
  SSN varchar(9) NOT NULL,
  CONSTRAINT pk_EmployeeID_SSN
    PRIMARY KEY CLUSTERED (EmployeeID, SSN)
);

Если вы посмотрите в SQL Server, то теперь у вас есть отображение первичного ключа pk_EmployeeID_SSN в папке keys.

Итак, теперь вы задаетесь вопросом, почему ничего не отображается в папке ограничений? Причина в том, что SQL Server связывает индексированные ограничения в папку keys. Чтобы привести пример ограничения, у которого нет ключа. Пожалуйста, смотрите ниже.
CREATE TABLE Employee
(
  EmployeeID INT NOT NULL,
  SSN varchar(9) NOT NULL,
  AddDate datetime NOT NULL
);
ALTER TABLE [dbo].[Employee] ADD CONSTRAINT [DF_Employee_AddDate]  DEFAULT (getdate()) FOR [AddDate];

insert into employee(employeeid, ssn) values(1, '111111111');
insert into employee(employeeid, ssn) values(2, '222222222');

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

Я собрал еще несколько примеров ниже, Если вам интересно, как они работают.
CREATE TABLE Employee1
(
  EmployeeID1 INT PRIMARY KEY,
  SSN varchar(9) NOT NULL
);

CREATE TABLE Employee2
(
  EmployeeID2 INT NOT NULL,
  SSN varchar(9) NOT NULL,
  CONSTRAINT pk_EmployeeID2_SSN
    PRIMARY KEY CLUSTERED (EmployeeID2, SSN)
);

CREATE TABLE Employee3
(
  EmployeeID3 INT PRIMARY KEY,
  SSN varchar(9) NOT NULL,
  CONSTRAINT unq_SSN
    UNIQUE NONCLUSTERED (SSN)
);


Gaurav Dixit

Эй, братан, спасибо за твой ответ . это означает, что первичный ключ означает комбинацию
[
1.) ключ (который генерируется в папке физически)+
2.) индекс (кластеризованный или некластеризованный, который создан)+
3.) уникальные ограничения (которые применяются к индексу )] .

а первичное ограничение означает только то ограничение, которое является точкой № 3
Я правильно понял .
вы описываете действительно в хорошей манере человека . Спасибо.

jgakenhe

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

Вот хорошая статья, которая могла бы объяснить это более подробно и по-другому, чем я: http://searchsqlserver.techtarget.com/tip/SQL-CONSTRAINT-clauses-PRIMARY-KEY-and-UNIQUE

Рейтинг:
2

Surinder Singh Khinda

Привет Виталий

Первичный ключ-это уникальное поле в таблице, и ему может быть присвоено только одно поле для каждой таблицы, обычно это что-то вроде EmployeeID, CustomerID или любое другое поле, которое вы пытаетесь сделать своим первичным ключом. Это означает, что другие таблицы могут использовать это поле для создания связей внешнего ключа с самими собой.

например посмотрите на нижеприведенные таблицы:

-------------------------------
/ * Создать Таблицу Поставщиков*/
-------------------------------
Создать таблицу поставщик(
SupplierID int not null первичный ключ,
SupplierName varchar(50) null,
ContactName varchar(50) null,
Адрес varchar (50) null,
Город варчар (50) null,
PostalCode varchar(50) null,
Страна varchar(20) null,
Телефон varchar(10) null,
)
---------------------------------
/ * Создать Таблицу Продуктов*/
---------------------------------
создать таблицу "товары"(
ProductID int not null первичный ключ,
ProductName varchar(50) null,
Столбцов идентификатор поставщика инт не null,
CategoryID int not null,
Единиц инт нуль,
Price int null,
внешний ключ (столбцов идентификатор поставщика) поставщик ссылок (столбцов идентификатор поставщика)

вы можете видеть, что обе таблицы имеют первичный ключ, который является уникальным, но таблица Products имеет внешний ключ, который ссылается на таблицу supplier. Это создает связь между двумя таблицами.

Ограничение уникальности просто означает, что конкретное поле должно быть уникальным.

надеюсь, это поможет


Gaurav Dixit

Привет, Суриндер, спасибо за твой ответ . Но мой вопрос не в разнице между B/w primary key и unique key , на самом деле-я хочу знать , есть ли какая-то разница между ключом и ограничениями в SQL, например, есть ли какая-то разница между B / w primary и primary constraint . Или это просто одно и то же?

Рейтинг:
1

Gaurav Dixit

Эй, братан, спасибо за твой ответ . это означает, что первичный ключ означает комбинацию
[
1.) ключ (который генерируется в папке физически)+
2.) индекс (кластеризованный или некластеризованный, который создан)+
3.) уникальные ограничения (которые применяются к индексу )] .

а первичное ограничение означает только то ограничение, которое является точкой № 3
Я правильно понял .
вы описываете действительно в хорошей манере человека . Спасибо.