Первичный ключ SQL - PullRequest
       26

Первичный ключ SQL

2 голосов
/ 09 апреля 2011

Я сталкивался с двумя версиями кода SQL.

--1
CREATE TABLE Location ( 
Id     INTEGER PRIMARY KEY 
                   NOT NULL,
Name   TEXT    NOT NULL 
);

--2
CREATE TABLE Location ( 
    Id     INTEGER PRIMARY KEY 
                       NOT NULL
                       UNIQUE,
    Name   TEXT    NOT NULL 
);

В SQL необходимо ли указывать первичный ключ как уникальный, а не нулевой?
Я всегда предполагал, что первичныйключ был уникальным и не мог быть нулевым.

Ответы [ 4 ]

4 голосов
/ 09 апреля 2011

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

3 голосов
/ 09 апреля 2011

Указание «UNIQUE» в столбце первичного ключа является избыточным, поскольку первичный ключ уже гарантирует, что так и будет.

2 голосов
/ 11 апреля 2011

Ваш код имеет правильный синтаксис. Это создаст ограничения PRIMARY KEY и UNIQUE, охватывающие один и тот же столбец.

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

В SQL Server пометка как «первичная» имеет значение (например, NOT NULL, ключ по умолчанию при создании ссылки на внешний ключ и т. Д.), Но я предпочитаю быть откровенным о таких вещах. Предположительно, вы хотите, чтобы у вашего стола был единственный ключ, поэтому я советую вам пропустить PRIMARY KEY. Кроме того, я рекомендую дать вашему ключу UNIQUE явное имя, например,

CREATE TABLE Location 
( 
 Id INTEGER NOT NULL 
    CONSTRAINT Location__key UNIQUE, 
 Name TEXT NOT NULL 
);
2 голосов
/ 09 апреля 2011

И UNIQUE, и NOT NULL не нужны, потому что PRIMARY KEY подразумевает оба.

...