ФорумРазработкаБазы данных → Структура таблиц. Одна или много?

Структура таблиц. Одна или много?

  • Сэм

    Сообщения: 16 Репутация: N Группа: Кто попало

    Spritz 30 августа 2007 г. 12:26

    Проектирую структуру для маленького проектика. (Ньюб однозначно, но делать то надо :) ).
    Есть таблица с данными пользователей (логин, пароль и тп). Нужно создать структуру для хранения данных о НАБОРЕ неких объектов у каждого пользователя. И вот тут встает вопрос, что оптимальнее (в первую очередь быстрее, но важно учесть, что место на хосте тоже не безгранично :) ). Или создать одну большую таблицу: ид_пользователя, ид_объекта и куча параметров. Или каждому пользователю генерить небольшую табличку с названием зависящим от ид: ид_объекта, параметры.
    Ориентировочно до 10000 пользователей.
    Работа с данной табличкой будет частенько на чтение. Реже на измененние.
    основной вопрос я бы сформулировал так: чем-то чревато создание 10000 маленьких табличек, особенно интересует парктическая сторона, как то: возможности наших хостеров и тп
    Сумбурно чуть-чуть вышло, но вроде понятно :)!?
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 30 августа 2007 г. 12:33, спустя 7 минут 25 секунд

    Я так понял
    будет таблица с 10к записями?
    это не много…

    объясни поподробнее, что за объекты и что за параметры

    лучше отдельно таблицу с юзерами
    и доп. таблицу с параметрами и делать привязку по id пользлователя
    что за объекты?
    все умрут, а я изумруд
  • cage

    Сообщения: 429 Репутация: N Группа: Кто попало

    Spritz 30 августа 2007 г. 12:40, спустя 6 минут 16 секунд

    лучше в отдельной таблице помести свойства объектов,в отдельную помести юзеров,а в 3ю помести айдишники первых соответствующие айдишникам вторых
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 30 августа 2007 г. 12:44, спустя 4 минуты 41 секунду

    на каждого юзера по своей таблице - это сильно жирно и абсолютно не нужно
    Или каждому пользователю генерить небольшую табличку с названием зависящим от ид: ид_объекта, параметры
    и Что за ид в этом случае мы имеем. Откуда оно будет браться?
    Есть 2 основных варианта - помимо "все в одну таблицу"
    1.
    tab "Users"
    - id
    - login
    - password

    tab "UsersParametrs"
    - user_id
    - param1
    - param2
    - param3
    - param4
    ….


    2.
    tab "Users"
    - id
    - login
    - password

    tab "UsersParametrs"
    - user_id
    - name_parametr
    - value_parametr


    Преимущество второго - нет лишних записей
    Недостаток - более сложные запросы и тип даных теряется - все параметры прийдется хранить в виде строки
    1-й применяется в случае когда не у всех юзеров есть доп параметры
  • Сэм

    Сообщения: 16 Репутация: N Группа: Кто попало

    Spritz 30 августа 2007 г. 12:51, спустя 6 минут 37 секунд

    Ну, предположим, игровой проект. Есть пользователь игрок, со своими параметрами типа ловкостей и удачи всяких. И у него есть… вещи, которые имеют свой износ к примеру и иные \"модификаторы\". И вещей будет от 30 до 100 ориентировочно. Так вот и думаю, как же оптимальнее… либо каждому пользователю свою табличку, но тогда будет 10К табличек по 100 строк каждая или одну с 1000К строк, в каждой из которых \"лишнее\" поле ид_игрока. Вроде бы оптимальнее много табличек, но я на практике с таким не сталкивался, вот и озадачился заранее :) не будет ли с этим проблем. Опять же… вещи эти могут переходить от одного игрока к другому и вроде бы нужен уникальный ид_вещи… или необязателен…
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 30 августа 2007 г. 12:58, спустя 6 минут 36 секунд

    не надо на каждого юзера по табличке

    у тебя есть:
    1. таблица с пользователями
    2. таблица с уникальными вещами
    3. таблица связей, показывающая пренадлежность вещи пользователю
    4. таблица навыков, ловкостей всяких
    5. таблица связей, показывающая пренадлежность навыков и их значений — пользователю

    я бы сделал так
    запросы сложные, но расширяемость отличная
    все умрут, а я изумруд
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 30 августа 2007 г. 12:59, спустя 1 минуту 48 секунд

    Вещи уникальные? Не может быть одинаковых вещей у разных человек?
    Тогда отдельная табличка для вещей с их характеристиками и привязкой к пользователю-владельцу.
  • Сэм

    Сообщения: 16 Репутация: N Группа: Кто попало

    Spritz 30 августа 2007 г. 13:44, спустя 45 минут

    Типичный, ну к примеру рассмотрим ХХ, проект. Т.е. вещи конечно же делятся по "виду", но могут иметь отличия, в частности, износ ЭТОЙ конкретной вещи.
    Т.е. Игрок1, у него есть Броня Шикарная (есстественно тут имеется табличка с базовыми свойствами данной брони, вещей). Про параметры пользователя речь НЕ ИДЕТ!!!! просьба не "захламлять" вопрос подвопросами :).
    Есть таблица пользователей вида: ид_игрока, логин, пассворд.
    Есть таблица вещей вида: ид_вещи, параметр1, параметр2…
    Вопрос создать третью ОДНУ таблицу, где будут пересекаться ид_игрока, ид_вещи и индивидуальные параметры ВЕЩИ типа износа (т.е. износилась данная броня на 20 пунктов).
    Решение 1:
    ид_игрока, ид_вещи, износ, уведичение параметра1… и т.п. (возможно ид_вещи конкретной, этой)
    Решение 2:
    таблица с именем vesh+ид_игрока
    ид_вещи, износ, увеличение параметра1 и тп

    Давайте не будем рекламировать проекты,не будем упоминать названия,здесь не рекламное агентство
  • cage

    Сообщения: 429 Репутация: N Группа: Кто попало

    Spritz 30 августа 2007 г. 13:49, спустя 4 минуты 38 секунд

    Там существуют отдельные таблицы для вещей, а износ одна из характеристик вещей
    Итог,лучше используй больше таблиц,сохрани нормированность,а то тебе это еще аукнется
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 30 августа 2007 г. 14:12, спустя 23 минуты 23 секунды

    щас для себя это прикинул… и правда структурка та еще получается.
    Тут надо сесть с кучей листочков, начертить всевозможные комбинации таблиц и выбрать что-то самое подходящее либо на их примере создать окончательный вариант.
    Но одной таблицей тут никак не обойтись, слишком много в ней будет ненужного.
    В одной хранишь инфу по пользователям. в другой всё что касается пользователей. в третьей все вещи которые будут в игре. наверное в четвертую можно записать все вещи игрока с их характеристиками.
    вобщем интересная задачка :) вот и доказывай что не зря носиш имя програмера а не нуба :)
    from TRIAL with LOVE
  • Сэм

    Сообщения: 16 Репутация: N Группа: Кто попало

    Spritz 30 августа 2007 г. 15:26, спустя 1 час 13 минут 25 секунд

    1)Сорри за невольную рекламу. Хотел взять название в кавычки, как имя нарицательное… ну а так даже лучше :). (А ничего, что я как бы свой проект "рекламирую", хотя он еще и не сделан…)

    ничего=)

    2)Для тех, кто в танке (без обид). Я не собираюсь хранить ВСЕ в одной табличке. Есстественно одна таблица для пользователей. ЕЩЕ одна для базовых свойств вещи. Вопрос конкретный, как удобнее (оптимальнее) хранить наборы вещей конкретного пользователя, с учетом того, что эти вещи будут уметь индивидуальные характеристики, которые определяются по ДВУМ ключам: по ид игрока и по ид вещи. Т.е. броня у игрока1 может иметь износ 20, а у игрока 2 такая же броня, но уже износилась на 30 пунктов. Более конкретный вопрос, чем чревато на практике хранить данные в большой куче (10000) маленьких табличек.
    ПС Как раз сейчас и занимаюсь тем, что пытаюсь сначала на листочке смоделировать структуру.
    ПСС Нуп я… пхп изучаю меньше месяца… чат для проекта сделал, а вот дальше уперся в правильную структуру таблиц, чтоб потом не переделывать…
    ПССС На самом деле проект задумывается для… думающих игроков, т.е. "бой" будет не тупым расставлением точек, но это уже могут и правда рекламой определить… просто маячит еще один "философский" вопрос: как оптимально хранить таблицу боя и ходов? Массив клеток, с юнитами и что они делали.. опять же… или под каждый бой делать отдельную табличку, а потом ее уничтожать (сохранив к прмиеру) или одну большую и чистить периодически…

    Так все таки ОДНА таблицка (ну или две, три) большая или много-много маленьких…
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 30 августа 2007 г. 15:40, спустя 13 минут 47 секунд

    чем чревато на практике хранить данные в большой куче (10000) маленьких табличек

    Черевато тем, что база умрет.
    Черевато тем, что замучаешься работать с ними.
    Про таблицу для каждого пользователя забудьте.
  • cage

    Сообщения: 429 Репутация: N Группа: Кто попало

    Spritz 30 августа 2007 г. 15:41, спустя 1 минуту 24 секунды

    сделай таблицу состояний,первая колонка айди юзера,вторая айди вещи,3я износ,четвертая цена по которой ее приобрел юзер и т.д. и т.п.
  • Сэм

    Сообщения: 16 Репутация: N Группа: Кто попало

    Spritz 30 августа 2007 г. 16:03, спустя 21 минуту 32 секунды


    сделай таблицу состояний,первая колонка айди юзера,вторая айди вещи,3я износ,четвертая цена по которой ее приобрел юзер и т.д. и т.п.

    Вот вопрос про это изначально и идет… ведь в этом случае: занимается "лишнее" место на повторение айди юзера, хранятся вещи по одному юзеру не подряд(хотя… это проблемой быть не должно выборке пофигу :) )
    но возникла идея сэкономить место на индексы и на саму табличку… сделать несколько маленьких, но что-то смущает в этом…
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 30 августа 2007 г. 16:14, спустя 11 минут 23 секунды

    занимается "лишнее" место на повторение айди юзера

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

    В базе вообще все не подряд.
    но возникла идея сэкономить место на индексы и на саму табличку… сделать несколько маленьких, но что-то смущает в этом…

    Про эту идею вам сказали уже неоднократно - в топку. Предлагаю к ней больше не возвращаться.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!