Три таблицы: одна для исходной строки, одна для уникальных слов (после корня слова?) И таблица соединения. Это также позволит вам выполнять более сложные поиски, такие как «вернуть все строки, содержащие не менее трех из следующих пяти слов» или «вернуть все строки, где« fox »происходит после« dog »».
CREATE TABLE string (
id INT NOT NULL AUTO_INCREMENT ПЕРВИЧНЫЙ КЛЮЧ,
строка ТЕКСТ НЕ НУЛЬ
)
CREATE TABLE word (
id INT NOT NULL AUTO_INCREMENT ПЕРВИЧНЫЙ КЛЮЧ,
слово VARCHAR (14) НЕ ПУСТО УНИКАЛЬНО,
УНИКАЛЬНЫЙ ИНДЕКС (слово ASC)
)
CREATE TABLE word_string (
id INT NOT NULL AUTO_INCREMENT ПЕРВИЧНЫЙ КЛЮЧ,
string_id INT NOT NULL,
word_id INT NOT NULL,
word_order INT NOT NULL,
FOREIGN KEY (string_id) ССЫЛКИ (string.id),
КЛЮЧЕВОЙ КЛЮЧ (word_id) ССЫЛКИ (word.id),
INDEX (word_id ASC)
)
// Пример данных
INSERT INTO string (string) ЗНАЧЕНИЯ
(«Это тестовая строка»),
(«Быстрая рыжая лиса перепрыгнула через ленивую коричневую собаку»)
ВСТАВИТЬ В слово (слово) ЦЕННОСТИ
('этот'),
('тестовое задание'),
( 'Строка'),
('быстрый'),
( 'Красный'),
('лиса'),
('Прыгать'),
('над'),
( 'Ленивым'),
( 'Коричневого'),
( 'Собака')
INSERT INTO word_string (string_id, word_id, word_order) VALUES
(0, 0, 0),
(0, 1, 3),
(0, 2, 4),
(1, 3, 1),
(1, 4, 2),
(1, 5, 3),
(1, 6, 4),
(1, 7, 5),
(1, 8, 7),
(1, 9, 8),
(1, 10, 9)
// Пример запроса - найти все строки, содержащие «fox» и «quick»
ВЫБРАТЬ
УНИКАЛЬНЫЙ string.id, string.string
ОТ
строка
ВНУТРЕННЕЕ ПРИСОЕДИНЕНИЕ word_string ON string.id = word_string.string_id
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Слово КАК ЛИСА НА fox.word = 'fox' И word_string.word_id = fox.id
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Слово КАК БЫСТРО ВКЛЮЧЕНО