Мне нужно спроектировать схему базы данных для следующей проблемы.Рассмотрим этот упрощенный грамматический «анализ» некоторых примеров фразы:
- «Чрезвычайно некомпетентный таксист»
- Extra-₁ ordinari₂ -ly₃
- in-₁ компетентный₂
- taxi-₁ driv₂ -er₃
В этой модели предложение состоит из массива слов, а Слово состоит из массива частей слова / морфемы .Как известно, реляционные базы данных не очень довольны массивами массивов.
Я вижу два решения и не знаю, как принять правильное решение.Первое, «грязное» решение : одиночная промежуточная таблица, которая связывает предложения с морфемами и хранит индексы массива.Множество идентичных записей в столбцах.
CREATE TABLE word ( -- pseudo-SQL
sentence_id FOREIGN KEY,
sentence_order INTEGER,
morpheme_id FOREIGN KEY,
morpheme_order INTEGER );
второе, «чистое» решение : Три (!) Промежуточные таблицы, вероятно, медленные и неудобные в использовании?Обратите внимание, что таблица word обслуживает только идентификаторы для использования двух таблиц внешних ключей.
CREATE TABLE sentence_word (
sentence_id FOREIGN KEY,
word_id FOREIGN KEY,
order INTEGER );
CREATE TABLE word ( id );
CREATE TABLE morpheme_word (
morpheme_id INTEGER FOREIGN KEY,
word_id INTEGER FOREIGN KEY
order INTEGER );
Обычно я бы предпочел чистое решение, но здесь чистое решение имеет неприятный видЭто.Кстати, я пытаюсь сделать это с помощью веб-фреймворка ORM (Django).