word_id INTEGER REFERENCES word(id)
фактически не создает внешний ключ в MySQL.Даже если вы используете InnoDB, для этого требуется явное объявление FOREIGN KEY
.
Кроме того, я бы, вероятно, использовал бы автонумерацию для идентификаторов для обеих таблиц, а затем пометил в качестве первичных ключей.
Итак, принимая во внимание оба из них, плюс примечание mpacona о множественных переводах, требующих отношения «многие ко многим»:
CREATE TABLE word (
word_id UNSIGNED INTEGER AUTOINCREMENT PRIMARY KEY,
entry TEXT,
pos VARCHAR(50)
);
CREATE TABLE translation (
translation_id UNSIGNED INTEGER AUTOINCREMENT PRIMARY KEY,
word_id UNSIGNED INTEGER,
lang VARCHAR(5),
entry TEXT
);
CREATE TABLE word_translation (
word_id UNSIGNED INTEGER,
translation_id UNSIGNED INTEGER,
PRIMARY KEY (word_id, translation_id),
INDEX (word_id),
INDEX (translation_id),
FOREIGN KEY fk_word_id (word_id) REFERENCES word(id),
FOREIGN KEY fk_translation_id (translation_id) REFERENCES translation(id)
);
Редактировать: я не был уверен, что такое pos, поэтому я ограничился этим50 символов.Вам также может понадобиться настроить TEXT на один из его более крупных вариантов, если вам нужно более 32 тыс. Символов.
Обновлен lang до 5 символов для поддержки синтаксиса стиля en-us
.