Взято из ссылки в руководстве Первичный ключ MySQL :
CREATE TABLE roles(
role_id INT AUTO_INCREMENT,
role_name VARCHAR(50),
PRIMARY KEY(role_id)
);
Трудно предоставить информацию по вашему конкретному вопросу, потому что в нем слишком мало деталей.
Из вашего комментария "если к таблице прикреплены две соединительные таблицы, понадобятся ли ей два первичных ключа?" . Нет.
Первичный ключ - это фактически логическая концепция (механизм проектирования), используемая для определения логической модели. Первичный ключ - это набор атрибутов (столбцов), которые вместе однозначно идентифицируют каждый конец каждого кортежа (строки) в отношении (таблице). Одно из правил первичного ключа заключается в том, что на отношение существует только один ключ.
Логическая модель используется, как уже упоминалось, в качестве схемы для создания физической модели, отношения становятся таблицами, атрибуты становятся столбцами, первичные ключи могут становиться уникальными индексами. Внешние ключи могут стать индексами в связанной таблице и т. Д.
Многие СУБД позволяют задавать ПЕРВИЧНЫЙ КЛЮЧ в определении физической таблицы. Большинство также позволяют определять FOREIGN KEYs на физической таблице. То, что они делают с ними, может варьироваться от одной реализации к другой. Многие используют определение ПЕРВИЧНОГО КЛЮЧА для определения УНИКАЛЬНОГО ИНДЕКСА некоторого вида, чтобы обеспечить обязательную уникальную идентификацию каждой записи в таблице.
Итак, нет, вашей таблице games_directors не нужны и не могут быть два первичных ключа. если вы решили указать PRIMARY KEY, вам нужно будет указать все столбцы, которые однозначно идентифицируют записи в таблице games_directors - скорее всего, PRIMARY KEY (game_id, director_id)
.
Аналогично, ПЕРВИЧНЫЙ КЛЮЧ для игрового стола, вероятно, будет PRIMARY KEY (game_id)
, для директоров, вероятно, будет PRIMARY KEY (director_id)
, а для типов игр это, вероятно, будет PRIMARY KEY (game_type_id)
.
Вы можете использовать внешний ключ из таблицы games_directors, чтобы при добавлении в него записей существовал соответствующий директор в таблице игр и таблице директоров. В этом случае ваша таблица games_directors будет иметь два отношения внешнего ключа (одно для игр, а другое для директоров). Но только один ПЕРВИЧНЫЙ КЛЮЧ.
Таким образом, вы можете получить что-то вроде этого:
create table games (
game_id integer,
PRIMARY KEY (game_id)
);
create table directors (
director_id integer,
PRIMARY KEY (director_id)
);
CREATE TABLE games_directors (
game_id INTEGER NOT NULL,
director_id INTEGER NOT NULL,
commission_paid DECIMAL(10,2),
PRIMARY KEY (game_id, director_id),
FOREIGN KEY (game_id) REFERENCES games(game_id),
FOREIGN KEY (director_id) REFERENCES directors(director_id)
);
NB. Я не проверял вышеизложенное с помощью PostgreSql. Синтаксис должен работать для большинства СУБД, но некоторые могут потребовать незначительной настройки.
Индексы могут использоваться для ускорения доступа к отдельным записям в таблице. Например, вы можете захотеть создать индекс по имени директора или идентификатору директора (в зависимости от того, как вы чаще всего обращаетесь к этой таблице). Если вы в основном обращаетесь к таблице директора с условием равенства, подобным следующему: where director_name = 'fred'
, тогда имеет смысл индекс по имени_ директора .
Индексы становятся более полезными по мере роста количества записей в таблицах.
Надеюсь, это ответит на ваш вопрос. : -)