Не делай этого.Ни одна библиотека базы данных не оптимизирована для динамических имен таблиц, и вам придется создавать запрос с нуля каждый раз, когда вы захотите получить доступ к таблице.Кроме того, как бы вы ответили на вопросы типа «какие данные я нашел в строке 34 файла 12»?
Вам понадобятся три таблицы.В синтаксисе PostgreSQL [*] это будет:
CREATE TABLE source (sourceid SERIAL, filename VARCHAR NOT NULL);
CREATE TABLE keyword (keywordid SERIAL, keyword VARCHAR NOT NULL);
CREATE TABLE location (locationid SERIAL,
sourceid INTEGER NOT NULL REFERENCES source(sourceid),
keyword INTEGER NOT NULL REFERENCES keyword(keywordid),
data VARCHAR NOT NULL,
line INTEGER NOT NULL,
span INTEGER NOT NULL);
Когда вы начнете обрабатывать новый текстовый файл, создайте новый кортеж source
и запомните его sourceid.Когда вы встречаете ключевое слово, либо вставьте для него новую запись и запомните его ключевое слово, либо найдите старую запись.Затем вставьте этот sourceid, keywordid и другие соответствующие данные в location
.
. Чтобы ответить на вопрос, который я поставил ранее:
SELECT * FROM
location JOIN source ON location.sourceid = source.sourceid
JOIN keyword ON location.keywordid = keyword.keywordid
WHERE
source.filename = 'foo.txt' AND
location.line = 34;
Да, это больше работы, чтобы сделать это«Правильно», но вы будете получать миллион раз больше за производительность, простоту обслуживания и простоту использования результатов.
[*] Синтаксис MySQL будет похожим, но я не помнюэто на макушке моей головы, и вы довольно легко можете определить разницу.