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

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

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

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

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

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

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

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

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

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

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

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

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

Ну почему же это избыточность?
Есть такое понятие как нормализация.
...
Рейтинг: 0 / 0
14.07.2014, 11:52:09
    #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
14.07.2014, 12:03:54
    #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
14.07.2014, 12:14:30
    #38695794
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как организовать бд для вот такой задачи?
Anatoly BИли использовать другой подход: "файл" - 'слово1;слово2;... словоN' - одна строка, где слова приведены через разделитель.


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

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

Получается так:
мы запрашиваем слово,
бд ищет его айди,
потом в таблице связей ищет все строки со значением нашего айди в поле id_file
и массивом выводит все соответствующие значения из поля id_word?
...
Рейтинг: 0 / 0
14.07.2014, 12:16:05
    #38695797
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как организовать бд для вот такой задачи?
* мы запрашиваем ФАЙЛ
...
Рейтинг: 0 / 0
14.07.2014, 12:18:27
    #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
14.07.2014, 12:34:50
    #38695820
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как организовать бд для вот такой задачи?
Спасибо, буду ковыряться дальше пока. Попробую оргранизовать тройную табличность и проверю логику необходимого функционала с ней.
...
Рейтинг: 0 / 0
14.07.2014, 15:48:22
    #38696026
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как организовать бд для вот такой задачи?
Посчитал тут длинну таблицы связей в строках и мне плохо стало)))

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

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

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

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

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

Т. е. эти 500 млд строк просто разбить на таблицы — сделать из одной таблицы связей несколько? Я к чему: т. е. принципиально ничего в логике не поменяется, просто облать выборки сузится за счёт разделения?
...
Рейтинг: 0 / 0
14.07.2014, 20:27:51
    #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
14.07.2014, 21:11:01
    #38696302
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как организовать бд для вот такой задачи?
Не, ребята, для меня это ещё круто, да ещё на английском. Я пока пытаюсь в общем сложить конструктор в голове и попробовать простую реализацию, используя базовые знания.
...
Рейтинг: 0 / 0
15.07.2014, 05:54:55
    #38696502
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как организовать бд для вот такой задачи?
andrejkНо какая разница, а вдруг)А вдруг я создам армию боевых треног и начну захватывать мир? Хм, нужно срочно озаботиться надёжным мощным источником питания для треног...
...
Рейтинг: 0 / 0
15.07.2014, 08:34:10
    #38696531
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как организовать бд для вот такой задачи?
tanglirandrejkНо какая разница, а вдруг)А вдруг я создам армию боевых треног и начну захватывать мир? Хм, нужно срочно озаботиться надёжным мощным источником питания для треног...

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

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


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