powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как организовать бд для вот такой задачи?
25 сообщений из 109, страница 1 из 5
Как организовать бд для вот такой задачи?
    #38695692
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть имя файла, его полный путь и ключевые слова.
Имя и, соответственно, полный путь у каждого файла уникальны.
У каждого файла может быть неограниченое число ключевых слов (без повторений).

Подозреваю, что тут придётся использовать внешние ключи, но не соображу как.

Пробовал всё в одну таблицу впихнуть (поля: имя(varchar), путь(varchar), слово1(boolean), слово2(boolean)…словоN(boolean)), но как-то не симпатично иметь таблицу с парой тысяч полей под все ключевые слова, тем более, что, вроде, есть ограничение на количество полей.

Думаю вынести ключевые слова в отдельную таблицу с парой полей (например, id и slova) и как-то связать некоторые их id с соответстующими файлами в другой таблице, так, чтобы выводя название файла, с ним выводились и его ключевые слова.

Помогите, пожалуйста, организовать бд.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38695703
Anatoly B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrejk,

как вариант три таблицы:
1) таблица файлов с полями:
id_file
file_name

2)таблица слов :
id_word
word_name

3) таблица связей:
id_file
id_word
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38695732
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если сократить идентификаторы и оставить только имя и слово (они по условию уникальны, т. е. грубо говоря могут сами быть идентификаторами), то разве не получится таблица связей в виде «file_name, word_name» вместо «id_file, id_word».

Если я ошибаюсь, то тогда объясните, пожалуйста, как эти связи использовать, ведь к одному файлу принадлежат сразу несколько десятков ключевых слов.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38695743
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получается, что для обозначения принадлежности к одному файлу сразу нескольких слов, в таблице связей придётся либо айди/имя файла повторять для разных слов либо айди/имя слова повторять для разных файлов? Это нормальная избыточность? Использование идентификаторов в этом случае только ускорят процессы, но для логики они не нужны (повторюсь, что имена файлов и слова по условию уникальны).
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38695744
Anatoly B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrejkЕсли сократить идентификаторы и оставить только имя и слово (они по условию уникальны, т. е. грубо говоря могут сами быть идентификаторами), то разве не получится таблица связей в виде «file_name, word_name» вместо «id_file, id_word».

Если я ошибаюсь, то тогда объясните, пожалуйста, как эти связи использовать, ведь к одному файлу принадлежат сразу несколько десятков ключевых слов.

Все можно, но числовой ключ на мой взгляд все-таки лучше чем varchar.
Если делать "file_name, word_name" - то в других таблицах нет необходимости.

На мой взгляд таблица с именем файлов может содержать и др. инфу (размер, дату, кто предоставил...)
Со словами - одно слово может относиться к разным файлам.

Дело вкуса.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38695748
Anatoly B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrejkПолучается, что для обозначения принадлежности к одному файлу сразу нескольких слов, в таблице связей придётся либо айди/имя файла повторять для разных слов либо айди/имя слова повторять для разных файлов? Это нормальная избыточность? Использование идентификаторов в этом случае только ускорят процессы, но для логики они не нужны (повторюсь, что имена файлов и слова по условию уникальны).

Ну почему же это избыточность?
Есть такое понятие как нормализация.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38695768
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, в таблицу с именем файлов будут помещены ещё и пути к ним. Это добавляет жизни третьей таблице связей.

Я отолько учусь (самостоятельно. Кстати почитал только что про нормализацию, спасибо:-)), поэтому переспрошу ещё раз — вот такое наполнение таблицы связей нормальное получается?:

id_file_1 — id_word_34
id_file_1 — id_word_35
id_file_1 — id_word_31
id_file_1 — id_word_98
id_file_1 — id_word_56
id_file_1 — id_word_42
id_file_1 — id_word_12
id_file_2 — id_word_54
id_file_2 — id_word_22
id_file_2 — id_word_34
id_file_2 — id_word_11
id_file_2 — id_word_09
id_file_3 — id_word_22
id_file_3 — id_word_23

Это нормально, что так много id_file одинаковых? Их как-то можно сократить?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38695787
Anatoly B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrejkДа, в таблицу с именем файлов будут помещены ещё и пути к ним. Это добавляет жизни третьей таблице связей.

Я отолько учусь (самостоятельно. Кстати почитал только что про нормализацию, спасибо:-)), поэтому переспрошу ещё раз — вот такое наполнение таблицы связей нормальное получается?:

id_file_1 — id_word_34
id_file_1 — id_word_35
id_file_1 — id_word_31
id_file_1 — id_word_98
id_file_1 — id_word_56
id_file_1 — id_word_42
id_file_1 — id_word_12
id_file_2 — id_word_54
id_file_2 — id_word_22
id_file_2 — id_word_34
id_file_2 — id_word_11
id_file_2 — id_word_09
id_file_3 — id_word_22
id_file_3 — id_word_23

Это нормально, что так много id_file одинаковых? Их как-то можно сократить?

Хочешь ты этого или нет, но связь файл - слово должна быть (или id_файла - слово или id_файла - id_слова).
Или использовать другой подход: "файл" - 'слово1;слово2;... словоN' - одна строка, где слова приведены через разделитель.
Все подходы имеют право на жизнь, их нужно учитывать при поиске. (для другого подхода последовательность слов - важна и искать like '%слово1%слово2%' вернет результат, а искать like '%слово2%слово1%' - нет).
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38695794
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly BИли использовать другой подход: "файл" - 'слово1;слово2;... словоN' - одна строка, где слова приведены через разделитель.


Т. е. в одном поле name_word будут целые строки из слов с разделителями?

Не. лучше пусть в таблице связей будут повторения.

Получается так:
мы запрашиваем слово,
бд ищет его айди,
потом в таблице связей ищет все строки со значением нашего айди в поле id_file
и массивом выводит все соответствующие значения из поля id_word?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38695797
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
* мы запрашиваем ФАЙЛ
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38695802
Anatoly B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrejk* мы запрашиваем ФАЙЛ


Ну да, можно одним запросом:

Код: sql
1.
select file_name from file_table where id_file in (select id_file from links where id_word in (select id_word from word_table where word = 'СЛОВО'))
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38695820
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, буду ковыряться дальше пока. Попробую оргранизовать тройную табличность и проверю логику необходимого функционала с ней.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696026
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посчитал тут длинну таблицы связей в строках и мне плохо стало)))

Предположим, что будет 100,000 пользователей,
у каждого пользователя по 100,000 файлов,
у каждого файла по 50 ключевых слов —
итого: 100,000×100,000×50=500,000,000,000 (строк).

Это нормально???)))
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696038
Anatoly B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrejkПредположим, что будет 100,000 пользователей,
у каждого пользователя по 100,000 файлов,

Гы, мене нравятся цифры - тогда нужно вопрос задавать как оптимизировать хранение и поиск в большом объеме данных.
100 тыс - прогнозируемая заполненность из реальной жизни?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696052
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly BГы, мене нравятся цифры - тогда нужно вопрос задавать как оптимизировать хранение и поиск в большом объеме данных.
100 тыс - прогнозируемая заполненность из реальной жизни?

Пока теоретически. Но какая разница, а вдруг) Что потом делать?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696054
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, кстати — как оптимизировать хранение и поиск в большом объеме данных?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696099
Anatoly B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrejk,

перед тем как кодить, сначала проводят анализ для чего это делается, какие поиски будут, по каким критериям, каков ориентировочный объем,...
Если данных много и их можно поделить на более мелкие "аля независимые части" можно сделать партицирование (скажем партиции по первой букве слова).
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696152
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly B,

Т. е. эти 500 млд строк просто разбить на таблицы — сделать из одной таблицы связей несколько? Я к чему: т. е. принципиально ничего в логике не поменяется, просто облать выборки сузится за счёт разделения?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696287
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkЕсть имя файла, его полный путь и ключевые слова.
Имя и, соответственно, полный путь у каждого файла уникальны.
У каждого файла может быть неограниченое число ключевых слов (без повторений).

Подозреваю, что тут придётся использовать внешние ключи, но не соображу как.

Пробовал всё в одну таблицу впихнуть (поля: имя(varchar), путь(varchar), слово1(boolean), слово2(boolean)…словоN(boolean)), но как-то не симпатично иметь таблицу с парой тысяч полей под все ключевые слова, тем более, что, вроде, есть ограничение на количество полей.

Думаю вынести ключевые слова в отдельную таблицу с парой полей (например, id и slova) и как-то связать некоторые их id с соответстующими файлами в другой таблице, так, чтобы выводя название файла, с ним выводились и его ключевые слова.

Помогите, пожалуйста, организовать бд.


как вариант (может и не подойти):
http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html
теряется структура тегов, зато сработает из коробки.
Теги просто навалить в стринговое поле через пробел
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696302
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не, ребята, для меня это ещё круто, да ещё на английском. Я пока пытаюсь в общем сложить конструктор в голове и попробовать простую реализацию, используя базовые знания.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696502
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkНо какая разница, а вдруг)А вдруг я создам армию боевых треног и начну захватывать мир? Хм, нужно срочно озаботиться надёжным мощным источником питания для треног...
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696531
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirandrejkНо какая разница, а вдруг)А вдруг я создам армию боевых треног и начну захватывать мир? Хм, нужно срочно озаботиться надёжным мощным источником питания для треног...

Как же зае**ли умники на всех форумах.
Я не знаю, будет у меня 500 млрд записей или нет, я их и не собираюсь делать, и скорее всего не будет, но ведь теоретически такая ситуация возможна, не обязательно у меня, а вообще возможна —
ТАК ВОТ, бл?*:!, Я ПРОСТО ХОЧУ ЧЕЛОВЕЧЕСКОГО ОТВЕТА, КАК, бл?*:!, В ТАКИХ СЛУЧАЯХ ПОСТУПАЮТ.
за***ли уже узколобые, которые не могут понять простой вещи, что люди спрашивают не только из практических нужд, но иногда еще и из гепотетических. Ну вот, бл?*:!, мне интересно…
Достали.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696697
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkЯ не знаю, будет у меня 500 млрд записей или нетЗато я знаю. Не будет.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696797
Триггерман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkТАК ВОТ, бл?*:!, Я ПРОСТО ХОЧУ ЧЕЛОВЕЧЕСКОГО ОТВЕТА, КАК, бл?*:!, В ТАКИХ СЛУЧАЯХ ПОСТУПАЮТ?
Итак, уважаемый andrejk, вы хотели узнать
andrejkкак оптимизировать хранение и поиск в большом объеме данных?
Ответ такой: забудьте про оптимизацию и поиск. Если вы разработали правильную продуманную структуру БД, то вопросы оптимизации и поиска за вас будет решать уже программа (она называется СУБД).
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696808
Anatoly B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ТриггерманЕсли вы разработали правильную продуманную структуру БД, то вопросы оптимизации и поиска за вас будет решать уже программа (она называется СУБД).

Разработка продуманной структуры - первый шаг оптимизации, да и поиски должны быть продуманы перед заполнением таблиц.
Как СУБД будет решать проблему оптимизации когда данные перестанут влезать в кэш?
...
Рейтинг: 0 / 0
25 сообщений из 109, страница 1 из 5
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как организовать бд для вот такой задачи?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]