Вопросы по оптимизации базы данных.

Discussion in 'PHP' started by PEPSICOLA, 14 Apr 2009.

  1. PEPSICOLA

    PEPSICOLA . . . . . 2L . . . . .

    Joined:
    14 Oct 2004
    Messages:
    1,025
    Likes Received:
    824
    Reputations:
    368
    ---offtop---
    может прикрепить?
    ---offtop---


    Как наиболее лучшим способом оптимизировать БД имея следующие условия:

    Есть пользователи (users) и различная информация (data) - файлы и данные, разного типа. Информацию с пользователями связывают несколько категорий. Первая категория - музыкальный жанр (genre). Параметры этой категории не статичны, то есть они имеют свойсто добавляться, например: Рок, Блюз, Джаз, Рэп, Хип-хоп, Поп, Транс и т.п.

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

    Информация может относиться к нескольким жанрам. К примеру добавлена песня, которая захватывает жанры: Рэп, Рок, Джаз.

    У пользователя в профиле, предпочтения для отображения песен: Метал, Рок.

    Совпадает "Рок" - файл должен отображаться ему.

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

    Как вариант, думал ограничить варианты выбора до 5-10 вариантов + добавить параметр "выбрать всё". Получиться идеально с точки зрения оптимизации. Создав отдельные таблицы для "жанров" где всего два поля "id" и "title". И создать таблицу user_preferred_genres, со столбцами "вариант1", "вариант2", "вариант3", "вариант4", "вариант5", "select_all".

    И подобно таблице user_preferred_genres, создать аналогичную таблицу для добавляемых данных - data_genres.

    Посоветуйте, пожалуйста. :rolleyes:
     
    9 people like this.
  2. Neoveneficus

    Neoveneficus Elder - Старейшина

    Joined:
    10 Apr 2008
    Messages:
    235
    Likes Received:
    125
    Reputations:
    23
    Code:
    Таблица users:
            id (первичный ключ, уникальный)
            name 
    Таблица genres:
            id (первичный ключ, уникальный)
            name 
    Таблица user_like_genres:
            user_id -> users.id (индекс, естественно, НЕуникальный)
            genre_id -> genres.id (индекс, естественно, НЕуникальный)
    Таблица data:
            file
            genre_id -> genres.id (индекс, естественно, НЕуникальный)
    -> означает ссылки (БД ведь реляционная relations - связи) гугл: foreign key; cascade; отношение многие ко многим
    user_like_genres будет иметь составной первичный ключ
    подробнее посмотри в интернете - думаю нет смысла расписывать
    UPD:
    Забей на гугл. Вот это заботай =)
    http://www.intuit.ru/department/database/rdbdev/6/
    UPD2:
    Сам когда-то задавался подобным вопросом. Нашел тему:
    /showthread.php?p=1180406
     
    #2 Neoveneficus, 14 Apr 2009
    Last edited: 14 Apr 2009
    1 person likes this.