У меня есть проект базы данных, который использует составные первичные ключи для обеспечения уникальности и которые также являются внешними ключами.MySQL - автоинкремент + составной первичный ключ - производительность и целостность
Эти таблицы затем привязаны к другим таблицам таким же образом, чтобы в итоге составной ключ мог получить до 4 или 5 столбцов. Это привело к некоторым довольно большим JOINs, поэтому я подумал, что простым решением будет использование столбца автоинкремента, который не является частью первичного ключа, но который используется как часть первичного ключа других таблиц.
Вот некоторые псевдо-код, показывающий общую компоновку:
CREATE TABLE Item (
id AUTO_INCREMENT,
...
PRIMARY KEY (id)
) ENGINE = InnoDB;
CREATE TABLE PriceCategory (
id AUTO_INCREMENT,
...
PRIMARY KEY (id)
)
CREATE TABLE ItemPriceCategory (
itemId,
priceCategoryId,
id AUTO_INCREMENT,
...
UNIQUE INDEX id,
PRIMARY KEY (eventId, priceCategoryId)
)
CREATE TABLE ClientType (
id AUTO_INCREMENT,
...
PRIMARY KEY (id)
)
CREATE TABLE Price (
itemPriceCategoryId,
clientTypeId,
id AUTO_INCREMENT,
...
UNIQUE INDEX id,
PRIMARY KEY (itemPriceCategoryId, clientTypeId)
)
table Purchase (
priceId,
userId,
amount,
PRIMARY KEY (priceId, userId)
)
Названия таблиц были изменены, чтобы защитить невинных ;-) Кроме того, фактическое расположение немного глубже в плане ссылок.
Итак, на мой вопрос, является ли это жизнеспособной стратегией с точки зрения производительности и целостности данных? Лучше ли иметь все ключи из всех ссылочных таблиц в таблице Purchase
?
Заранее спасибо.
Аналогично: http://stackoverflow.com/questions/6372058/MySQL-первичный ключ-в-реляционной язычок- le-unique-id-or-multiple-unique-key/ –