2013-12-23 8 views
14

Я очень растерялся прямо сейчас, может быть, вы можете помочь мне лучше понять проблему в вопросе о том, что таблица может иметь два первичных ключа, если да, то как? и тогда нет?Может ли таблица иметь несколько первичных ключей?

+2

Зачем это ?. AFAIK первичный ключ помогает однозначно идентифицировать строку внутренним образом. Почему у вас много таких внутренних органов? Вы можете иметь много индексов или иметь ключи в зависимости от многих полей, но, тем не менее, идея остается: она должна быть уникальным идентификатором. –

+0

Какова проблема, с которой вы сталкиваетесь? – Popnoodles

+0

читайте [этот учебник] (http://www.functionx.com/sql/Lesson11.htm) .. – Sohail

ответ

14

Нет Вы не можете иметь два первичных ключей в одной таблице, но вы можете иметь составной первичный ключ

Поскольку первичный ключ является тождеством в ряд и не может быть два идентификатора против ряда.

3

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

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

0

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

1

На столе вы можете сделать индексы, которые позволяют внутреннему движку базы данных обрабатывать содержимое затронутых столбцов (от 1 до многих) для удобного поиска. Поскольку движок в этот момент уже оценивает и сортирует содержимое полей, он также может легко обеспечить уникальность значений. Таким образом, индекс может охватывать 1 до многих строк и, кроме того, также быть уникальным.

A первичный ключ является теоретически необязательным, хотя на практике обязательным маркером по конкретному индексу является его вечно уникальный способ ссылки на определенную строку в таблице. Обычно это либо идентификатор GUID, либо целое число с автоматическим приращением (identity в SQL Server). Первичный ключ сам по себе является уникальным для любой данной таблицы и обеспечивает определение уникального ограничения по определению, но может опционально охватывать несколько строк (a spanned index/key).

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

0

Как вы не можете определить более одного столбца в качестве первичного ключа, как показано ниже

create table test1 (col1 numeric(10) primary key, col2 numeric(10) primary key 
,col3 numeric(10) primary key, col4 numeric(10)) 

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

Ниже приведен SQL, чтобы создать таблицу с составной первичный ключ

CREATE TABLE track( 
col1 numeric(10) , col2 numeric(10) ,col3 numeric(10) primary key, col4 numeric(10), 
PRIMARY KEY (col1,col2,col3) 
) 
25

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

использовать что-то вроде этого, когда вы создаете таблицу:

CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName) 

где P_Td и LastName столбцы в таблице.

Если вы считаете, что хотите больше, чем один первичный ключ, тогда ответ «на самом деле». У вас может быть только один первичный ключ. Тем не менее, вы можете иметь столько индексов, сколько хотите, которые имеют уникальное ограничение на них. Уникальный индекс делает почти то же самое, что и первичный ключ.

, например: -

CREATE TABLE Persons 
(
    P_Id int NOT NULL, 
    LastName varchar(255) NOT NULL, 
    FirstName varchar(255), 
    Address varchar(255), 
    City varchar(255), 
    CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName) 
) 

Примечание: В приведенном выше примере есть только один первичный ключ (pk_PersonID). Однако значение pk_PersonID составлено из двух столбцов (P_Id и LastName).

4

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

В принципе, любая функция или свойство, которое вы связываете с ключом, обозначенным как «primary», может быть также связано с любым другим ключом. Поэтому для многих практических целей вы можете назначить более одного такого «первичного» ключа, если вы этого захотите, но только в том случае, если это разрешено ограничениями какой-либо конкретной СУБД.

Под реляционной моделью данных всех ключи равны, и нет специальной функции даны первичным ключей (на самом деле реляционного использование термина первичных ключ первоначально упомянутых любых и всех ключей от а не только один ключ). К сожалению, многие СУБД не соблюдают этот принцип и могут ограничить некоторые функции одним и только одним ключом таблицы, что делает необходимым выборочное представление о том, какой ключ получает как первичный. Поэтому ответ на ваш вопрос должен быть ДА в принципе. Когда вам нужно достичь этого в некоторых конкретных СУБД SQL, фактический ответ: это зависит.

0

CREATE TABLE трек ( col1 числовой (10), col2 числовой (10), col3 числовой (10), COL4 числовой (10), PRIMARY KEY (col1, col2, col3) )

3

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

CREATE TABLE table_name (col1 Тип данных, col2 Тип данных, col3 Тип данных, COL4 Тип данных, PRIMARY KEY (col1, col2, col3))

Этим способом вы можете добавить первичный ключ в одной таблице

0

Вы можете попробовать FOREIGN KEY - поле (или набор полей) в одной таблице, которое ссылается на PRIMARY KEY в другой таблице.

Смежные вопросы