2014-11-25 2 views
4

У меня есть два стола для многоязычных статей. В первой таблице у меня нет текстовых столбцов (id, authorid, date и т. Д.). Во второй таблице у меня есть текстовые столбцы (заголовки, контент и т. Д.).MySQL - будет ли первичный ключ создавать еще один индекс, если столбец уже проиндексирован?

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

В таблице 2 столбец (id) имеет внешний ключ к таблице 1, поэтому он уже проиндексирован. Я не могу установить идентификатор столбца для таблицы 2, так как ясно, что он не уникален. Тем не менее, я не могу редактировать данные из таблицы 2 в workbench, поскольку он говорит - нет первичного ключа или не нулевого уникального ключа.

То, что я говорю в схеме:

Table1{ 
id 
date 
authorId 
} 

Table2{ 
id 
title 
content 
languageId 
} 

Так что ответ - если я создаю первичный ключ для столбца (ID) в таблице 2 - будет MySQL создать еще один индекс для этого столбца?

+0

Возможно, у вас должен быть столбец «id», а также столбец «table1ID» (или какое-то такое имя), которое на самом деле будет вашим текущим столбцом «id». Затем сделайте 'id' основным ключом и сделайте' table1ID' внешним ключом. –

+0

Индекс связан с первичным ключом, поэтому да, добавление первичного ключа добавит индекс (и в InnoDB также повлияет на хранение строк). –

+0

Почему у вас не было первичного ключа во второй таблице? просто добавьте столбец для него. но да, он добавит индекс - [** Еще один вопрос SO **) (http://stackoverflow.com/questions/1071180/is-the-primary-key-automatically-indexed-in-mysql) –

ответ

2

Вы не можете создать первичный ключ для id в таблице2, поскольку этот id не является уникальным и по определению первичный ключ должен быть УНИКАЛЬНЫМ и НЕ НУЛЛ.

Однако, для вас, чтобы иметь возможность редактировать данные из таблицы 2 в верстаке, я предлагаю вам создать composite primary key на Table2 с использованием как id и languageId полей.

ALTER TABLE table2 ADD PRIMARY KEY(id, languageId); 

Здесь я предполагаю, что id, languageId столбцы вместе однозначно идентифицировать одну запись в Table2.

+1

И тогда текущий индекс может быть отброшен, так как «id» теперь покрывается ПК. – RandomSeed

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