Как сделать составной первичный ключ
Создание первичных ключей Create Primary Keys
Перед началом Before You Begin
Ограничения Limitations and Restrictions
В таблице возможно наличие только одного ограничения по первичному ключу. A table can contain only one PRIMARY KEY constraint.
Все столбцы с ограничением PRIMARY KEY должны иметь признак NOT NULL. All columns defined within a PRIMARY KEY constraint must be defined as NOT NULL. Если допустимость значения NULL не указана, то для всех столбцов c ограничением PRIMARY KEY устанавливается признак NOT NULL. If nullability is not specified, all columns participating in a PRIMARY KEY constraint have their nullability set to NOT NULL.
безопасность Security
Permissions Permissions
Создание новой таблицы с первичным ключом требует разрешения CREATE TABLE в базе данных и разрешения ALTER на схему, в которой создается таблица. Creating a new table with a primary key requires CREATE TABLE permission in the database and ALTER permission on the schema in which the table is being created.
Создание первичного ключа в существующей таблице требует разрешения ALTER на таблицу. Creating a primary key in an existing table requires ALTER permission on the table.
Использование среды SQL Server Management Studio Using SQL Server Management Studio
Создание первичного ключа To create a primary key
Чтобы переопределить первичный ключ, необходимо удалить все связи с существующим первичным ключом и только после этого создавать новый первичный ключ. If you want to redefine the primary key, any relationships to the existing primary key must be deleted before the new primary key can be created. Появится сообщение, предупреждающее об автоматическом удалении в ходе процесса всех существующих связей. A message will warn you that existing relationships will be automatically deleted as part of this process.
Ключевой столбец-источник идентифицируется символом первичного ключа в соответствующем селекторе строк. A primary key column is identified by a primary key symbol in its row selector.
Если первичный ключ состоит более чем из одного столбца, то в одном столбце могут встречаться дублирующиеся значения, но все сочетания значений изо всех столбцов первичного ключа должны быть уникальными. If a primary key consists of more than one column, duplicate values are allowed in one column, but each combination of values from all the columns in the primary key must be unique.
При определении составного ключа порядок столбцов в первичном ключе совпадает с порядком столбцов, показанным в таблице. If you define a compound key, the order of columns in the primary key matches the order of columns as shown in the table. Однако после создания первичного ключа порядок столбцов можно изменить. However, you can change the order of columns after the primary key is created. Дополнительные сведения см. в разделе Изменение первичных ключей. For more information, see Modify Primary Keys.
Использование Transact-SQL Using Transact-SQL
Создание первичного ключа в существующей таблице To create a primary key in an existing table
В следующем примере создается первичный ключ для столбца TransactionID в базе данных AdventureWorks. The following example creates a primary key on the column TransactionID in the AdventureWorks database.
Создание первичного ключа в новой таблице To create a primary key in a new table
В следующем примере создается таблица и определяется первичный ключ для столбца TransactionID в базе данных AdventureWorks. The following example creates a table and defines a primary key on the column TransactionID in the AdventureWorks database.
Создание первичного ключа с кластеризованным индексом в новой таблице To create a primary key with clustered index in a new table
В следующем примере создается таблица и определяется первичный ключ для столбца CustomerID и кластеризованного индекса для TransactionID в базе данных AdventureWorks. The following example creates a table and defines a primary key on the column CustomerID and a clustered index on TransactionID in the AdventureWorks database.
Как правильно создать составные первичные ключи-MYSQL
INT(9) 11209437 (я могу себе представить, почему это плохо)
VARCHAR (10) 11209-437
DECIMAL (10,4) 11209.437
было бы хорошо использовать это в качестве первичного ключа на MySQL MYISAM DB?
8 ответов
Я бы использовал составной (многоколоночный) ключ.
таким образом, вы можете иметь t1id и t2ID в качестве внешних ключей, указывающих на их соответствующие таблицы.
Я бы не сделал первичный ключ таблицы «info» составным из двух значений из других таблиц.
другие могут сформулировать причины лучше, но кажется неправильным иметь столбец, который действительно состоит из двух частей информации. Что, если вы хотите сортировать по ID из второй таблицы по какой-то причине? Что делать, если вы хотите подсчитать количество раз, когда значение из любой таблицы присутствует?
синтаксис CONSTRAINT constraint_name PRIMARY KEY(col1,col2,col3) например:
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
приведенный выше пример будет работать, если вы не написали его во время создания таблицы, например:
чтобы добавить это ограничение в существующую таблицу необходимо выполнить следующий синтаксис
составные первичные ключи, что вы хотите, где вы хотите создать связь «многие ко многим» с таблицей фактов. Например, у вас может быть пакет аренды для отдыха, который включает в себя ряд свойств. С другой стороны, недвижимость также может быть доступна как часть ряда пакетов аренды, либо самостоятельно, либо с другими объектами недвижимости. В этом случае устанавливается связь между свойством и арендным пакетом с таблицей фактов свойства / пакета. Этот связь между свойством и пакетом будет уникальной, вы только когда-либо присоединитесь, используя property_id с таблицей свойств и/или package_id с таблицей пакетов. Каждое отношение уникально, и ключ auto_increment является избыточным, поскольку он не будет отображаться в любой другой таблице. Следовательно, определение составного ключа является ответом.
помимо личных предпочтений дизайна, есть случаи, когда нужно использовать составные первичные ключи. Таблицы могут иметь два или более полей, которые предоставляют уникальную комбинацию, и не обязательно с помощью внешних ключей.
в качестве примера, каждый штат США имеет набор уникальных избирательных округов. Хотя многие государства могут индивидуально иметь CD-5, в любом из 50 государств никогда не будет более одного CD-5, и наоборот. Поэтому создание поля autonumber для Массачусетский CD-5 был бы излишним.
Если база данных управляет динамической веб-страницей, написание кода для запроса на комбинацию из двух полей может быть намного проще, чем извлечение/повторная отправка ключа с автоматическим номером.
поэтому, хотя я не отвечаю на первоначальный вопрос, я, конечно, ценю прямой ответ Адама.
Предположим, вы уже создали таблицу, теперь вы можете использовать этот запрос для создания составного первичного ключа
Как сделать составной ключ в access?
Первичный ключ – это уникальная характеристика для каждой записи в пределах таблицы. Программа Access поддерживает два типа первичных ключей: простой и составной.
В роли простого ключа может выступать одно уже из существующих полей таблицы, если в данном поле нет пустых и повторяющихся значений. Примерами таких полей могут быть номера машин, инвентарные номера, идентификационные коды. Составной ключ строится как комбинация двух и более элементов данных. Для таблицы Сотрудники, например, теоретически можно использовать в качестве первичного ключа комбинацию двух полей, Фамилию и Имя. Однако вполне возможно, что в компании появится еще один сотрудник с таким же именем и фамилией, как у кого-либо из уже работающих.
Очевидно, что к полю (полям), претендующему на роль первичного ключа, предъявляются довольно жесткие требования. Поэтому общепринятой практикой считается создание специального поля идентифицирующего поля, которое выполняет функции ключа (например, Код клиента, Код заказа). С добавлением каждой новой записи в таблицу в это поле заносится специальное значение (как правило, числовое), уникально определяющее запись. В приложении Access организовать такую нумерацию можно благодаря типу данных Счетчик, который присваивает каждой новой записи свой номер, генерируя последовательность чисел с шагом 1 (или случайным образом).
Существуют основные правила, которые приняты для ключей в Access:
– для удобства ключевое поле обычно указывается в структуре таблицы первым;
– если для таблицы определен первичный ключ, программа Access автоматически блокирует ввод в это поле повторяющихся значений или значения Null (пусто);
– Access автоматически сортирует записи таблицы по первичному ключу;
– поле первичного ключа является индексом, с помощью которого ускоряется сортировка и поиск записей.
Чтобы установить для таблицы первичный ключ и завершить ее создание в режиме конструктора, выполните следующие действия:
– в режиме конструктора выделите поле, которое будет играть роль первичного ключа;
– кликните по кнопке Ключевое поле панели инструментов Конструктора таблиц или выберите команду главного меню Правка – Ключевое поле (слева возле имени выделенного поля появится символ ключа);
– после указания ключевого поля таблицу необходимо сохранить, для чего необходимо кликнуть по кнопке Сохранить панели инструментов конструктор таблиц и в открывшемся окне ввести имя таблицы и кликнуть по кнопке Ок.
Если первичный ключ не определен, то при выходе из режима конструктора появится соответствующее предупреждение, и программа Access предложит Вам создать ключевое поле до закрытия таблицы.
Выше неоднократно упоминалось понятие ключевого поля. Ключевое поле — это одно или несколько полей, комбинация значений которых однозначно определяет каждую запись в таблице. Если для таблицы определены ключевые поля, то Microsoft Access предотвращает дублирование или ввод пустых значений в ключевое поле. Ключевые поля используются для быстрого поиска и связи данных из разных таблиц при помощи запросов, форм и отчетов.
В Microsoft Access можно выделить три типа ключевых полей: счетчик, простой ключ и составной ключ. Рассмотрим каждый из этих типов.
Для создания ключевого поля типа Счетчик необходимо в режиме Конструктора таблиц:
Если до сохранения созданной таблицы ключевые поля не были определены, то при сохранении будет выдано сообщение о создании ключевого поля. При нажатии кнопки Да (Yes) будет создано ключевое поле счетчика с именем Код (ID) и типом данных Счетчик (AutoNumber).
Для создания простого ключа достаточно иметь поле, которое содержит уникальные значения (например, коды или номера). Если выбранное поле содержит повторяющиеся или пустые значения, его нельзя определить как ключевое. Для определения записей, содержащих повторяющиеся данные, можно выполнить запрос на поиск повторяющихся записей. Если устранить повторы путем изменения значений невозможно, следует либо добавить в таблицу поле счетчика и сделать его ключевым, либо определить составной ключ.
Составной ключ необходим в случае, если невозможно гарантировать уникальность записи с помощью одного поля. Он представляет собой комбинацию нескольких полей. Для определения составного ключа необходимо:
Для составного ключа существенным может оказаться порядок образующих ключ полей. Сортировка записей осуществляется в соответствии с порядком ключевых полей в окне Конструктора таблицы. Если необходимо указать другой порядок сортировки без изменения порядка ключевых полей, то сначала нужно определить ключ, а затем нажать кнопку Индексы (Indexes) на панели инструментов Конструктор таблиц (Table Design). Затем в появившемся окне Индексы (Indexes) нужно указать другой порядок полей для индекса с именем Ключевое поле (Primary Key).
Рассмотрим в качестве примера применения составного ключа таблицу «Заказано» (OrderDetails) базы данных (Northwind) (рис. 2.23).
В данном случае в качестве составного ключа используются поля «Код заказа» (OrderlD) и «КодТовара» (ProductID), т. к. ни одно из этих полей в отдельности не гарантирует уникальность записи. При этом в таблице выводится не код товара, а наименование товара, т. к. поле «КодТовара» (ProductID) данной таблицы содержит подстановку из таблицы «Товары» (Products), а значения полей «КодТовара» (ProductID) этих таблиц связаны отношением «один-ко-многим» (одной записи таблицы «Товары» (Products) может соответствовать несколько записей таблицы «Заказано» (OrderDetails)). Оба поля могут содержать повторяющиеся значения. Так, один заказ может включать в себя несколько товаров, а в разные заказы могут включаться одинаковые товары. В то же время сочетание полей «КодЗаказа» (OrderlD) и «КодТовара» (ProductID) однозначно определяет каждую запись таблицы «Заказы» (OrderDetails).
Чтобы изменить ключ, необходимо:
Рис. 2.23. Пример таблицы с использованием составного ключа
Чтобы удалить ключ, необходимо:
Компьютеры Составной ключ просмотров — 105
Простой ключ
Ключевые поля счетчика
Типы используемых ключевых полей
Сила реляционных баз данных, таких как Microsoft Access, состоит по сути в том, что они могут быстро найти и связать данные из разных таблиц при помощи запросов,форм и отчетов. Для этого каждая таблица должна содержать одно или несколько полей, однозначно идентифицирующих каждую запись в таблице. Это принято называть ключевым полем таблицы. В случае если для таблицы обозначены ключевые поля, то Microsoft Access предотвращает дублирование или ввод пустых значений в ключевое поле.
В Microsoft Access можно выделить три типа ключевых полей: счетчик, простой ключ и составной ключ.
В случае если поле содержит уникальные значения, такие как коды или инвентарные номера, то это поле можно определить как ключевое. В случае если выбранное поле содержит повторяющиеся или пустые значения, то оно не будет определено как ключевое. Для определения записей, содержащих повторяющиеся данные можно выполнить запрос на поиск повторяющихся записей. В случае если устранить повторы путем изменения значений невозможно, то следует либо добавить в таблицу поле счетчика и сделать его ключевым, либо определить составной ключ.
В случаях, когда невозможно гарантировать уникальность значений каждого поля, существует возможность создать ключ, состоящий из нескольких полей. Чаще всего такая ситуация возникает для таблицы, используемой для связывания двух таблиц в отношении «многие-ко-многим». Примером такой таблицы может служить таблица «Заказано» из демонстрационной базы данных «Борей», связывающая таблицы «Заказы» и «Товары». Ключ в этой таблице состоит из двух полей: «КодЗаказа» и «КодТовара». В таблице «Заказано» может быть представлено много товаров и много заказов, но каждый товар включается в заказ только один раз, в связи с этим комбинация значений полей «КодЗаказа» и «КодТовара» достаточна для образования ключа.
Другим примером может служить база данных по складским запасам, в которой используются один основной и один или несколько вспомогательных инвентарных номеров.
Примечание.В случае если определить подходящий набор полей для составного ключа сложно, просто добавьте поле счетчика и сделайте его ключевым. К примеру, не рекомендуется определять ключ по полям «Имена» и «Фамилии», поскольку нельзя исключить повторения этой пары значений для разных людей.
$!AKСодание и изменение ключевых полей
Откройте таблицу в режиме конструктора.
Выделите одно или несколько полей, которые крайне важно определить как ключевые.
Для выделения одного поля выберите область выделения строки нужного поля.
Для выделения нескольких полей нажмите и удерживайте клавишу CTRL и выберите область выделения для каждого поля.
Нажмите кнопку Ключевое поле на панели инструментов.
Примечания
·Важно заметить, что для составного ключа существенным может оказаться порядок образующих ключ полей. Сортировка записей осуществляется в соответствии с порядком ключевых полей в бланке в режиме конструктора таблицы. В случае если крайне важно указать другой порядок сортировки без изменения порядка ключевых полей, то сначала определите ключ, как это описано выше, а затем нажатием кнопки Индексы на панели инструментов откройте окно «Индексы» и укажите другой порядок полей для индекса с именем «PrimaryKey».
Читайте также
Простой ключ Ключевые поля счетчика Типы используемых ключевых полей Сила реляционных баз данных, таких как Microsoft Access, заключается в том, что они могут быстро найти и связать данные из разных таблиц при помощи запросов,форм и отчетов. Для этого каждая таблица…
Система управления базами данных SQLite. Изучаем язык запросов SQL и реляционные базы данных на примере библиотекой SQLite3. Курс для начинающих.
Часть 11.3: Первичные ключи в базах данных SQLite: PRIMARY KEY. Ограничение первичного ключа
Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем изучать базы данных и наше знакомство с библиотекой SQLite3. Мы разобрались с ограничениями уровня столбца и узнали, какие возможности есть у СУБД для поддержания целостности данных на уровне таблицы. Теперь давайте более подробно поговорим про ограничения уровня таблицы и первым ограничение, которое мы рассмотрим, будет ограничение первичного ключа или просто PRIMARY KEY.
Первичные ключи в базах данных SQLite: PRIMARY KEY. Ограничение первичного ключа.
В теории баз данных ключ или ключевой атрибут — это столбец, который позволяет однозначно идентифицировать таблицу в базе данных. На практике, ни одна СУБД в мире не знает о таком столбце и не знает теории баз данных. На практике есть первичный ключ, который является правилом, которое SQLite ни когда не нарушит. SQLite будет следить всегда за тем, чтобы в столбце PRIMARY KEY были всегда уникальные и вечные значения.
В этой записи мы рассмотрим ограничения первичного ключа в базах данных SQLite в теории и на практике, так же узнаем, почему первичный ключ это не только правило базы данных, но еще и индекс, а так же поговорим о том, как реализовать составной первичный ключ для таблицы базы данных SQLite3
Первичный ключ, как ограничение уровня таблицы в базах данных SQLite. PRIMARY KEY в SQLIte3
Первичный ключ, это не только ключевой атрибут, который идентифицирует таблицу в базе данных и даже не только обязательное условие второй нормальной формы, а, соответственно, и третьей нормальной формы. Первичный ключ или столбец PRIMARY KEY – это ограничение уровня таблицы для любой реляционной СУБД.
Ограничение уровня таблицы – это правило, которое никогда не должна нарушать ни одна СУБД и не должна никому давать это делать. Первичный ключ или PRIMARY KEY в базах данных SQLite – это столбец, значения которого должны быть уникальными и вечными, и что бы не произошло, что бы не случилось, SQLite никогда не нарушит правило уникальности и вечности первичного ключа.
Если мы задали первичный ключ для таблицы при помощи PRIMARY KEY, то, во-первых, мы сами должны заботиться об уникальности и вечности, во-вторых, SQLite будет делать это за нас. Если вы видите, что значения в столбце повторяющиеся и SQLite не дает вам их добавить, то, вероятнее всего, вы ошиблись при проектировании базы данных и назначили не тот столбец в качестве PRIMARY KEY.
Когда мы создаем первичный ключ, как ограничение таблицы, то вместо PRIMARY KEY мы вправе использовать конструкцию UNIQUE KEY, SQLite это позволяет и никаких проблем с таким подходом у вас не будет.
Помимо всего прочего, первичный ключ в базе данных SQLite, вернее столбец, который мы назначили, как PRIMARY KEY, является еще и индексом таблицы. Благодаря индексам таблицы операция выборки данных из базы данных при помощи команды SELECT происходит значительно быстрее, но место на диске база данных начинает занимать больше
Вывод: первичный ключ в базах данных SQLite3 или PRIMARY KEY – это правила, которые нельзя нарушать: правила уникальности и вечности значений столбца PRIMARY KEY. Так же первичный ключ является индексом таблицы в базе данных SQLite. Столбец, который объявлен, как PRIMARY KEY – это индекс, которому мы можем даже дать имя.
Пример использования первичного ключа в SQLite. Пример PRIMARY KEY в SQLite
Мы разобрались в теории, что собой представляет первичный ключ в реляционных базах данных, а также выяснили, что для создания первичного ключа необходимо использовать конструкцию PRIMARY KEY, тогда SQLite3 поймет, что данный столбец является первичным ключом, а его значения должны быть уникальными и вечными.
Давайте теперь на практике посмотрим, как первичный ключ может обеспечить целостность данных в базе данных и посмотрим, как в SQLite можно объявить столбец с ограничением PRIMARY KEY.