|
|
|
| здравствуйте. У меня есть один вопрос - он несложный, но хочу посоветоваться с людьми более понимающими в этом вопросе.
У меня есть одна таблица - в ней хранится список всех участников.
И есту еще куча таблиц - по одной на каждого участника, куда будет записываться каждую неделю новая информация на каждого участника.
Мне нужно сделать, чтобы при выборе определенного участника - то есть определенной записи из таблицы участников, вызывалась другая таблица, которая отвечает этому участнику.
Самый простой способ - это в таблице участников сделать дополнительное поле, где для каждого участника будет записано название таблицы, которое ему отвечает, и это название вставлять в функцию SELECT.
Но есть ли другой, возможно более рациональный, способ привязки одной таблицы к записи из другой таблицы? Заранее спасибо за ответ. | |
|
|
|
|
|
|
|
для: nebelll
(26.12.2008 в 15:17)
| | >И есту еще куча таблиц - по одной на каждого участника, куда будет записываться каждую неделю новая информация на каждого участника.
Не проще создать одну таблицу info и записывать туда каждую неделю новую информацию? | |
|
|
|
|
|
|
|
для: nebelll
(26.12.2008 в 15:17)
| | >> куда будет записываться каждую неделю новая информация на каждого участника.
Всмысле стараю информация на участника тоже необходимо сохранять ?
Вообще-то и в этом случае можно попробовать всю информацию на всех поместить в одной таблице .
Насчёт свяэей записей тогда просто можно было-бы добавить в таблицу поле с id участника к которому относится эта информация.
Слишком много таблиц тоже плохо. Мне кажется достать по индексам в файле быстрее чем достать по названиям файлов в файловой системе , если слишком много файлов таблиц , которые mysql хранит в одной дирректории | |
|
|
|
|
|
|
|
для: nebelll
(26.12.2008 в 15:17)
| | >Самый простой способ - это в таблице участников сделать дополнительное поле, где для >каждого участника будет записано название таблицы, которое ему отвечает
Вы это серьезно?
А если участников будет 1000000, то вы хотите плодить такое же количество таблиц? | |
|
|
|
|
|
|
|
для: AcidTrash
(26.12.2008 в 21:17)
| | А как иначе? Как всех посетить в одну таблицу? Поля, которіе надо заполянть в участников будут разніе, і всех их поместить в одну таблицу, кажется не так просто...
Тоесть если будет одна огромная таблица ,это лучше чем много небольших?
В принцыпе возможно сдулать одну таблицу где было-би поле с идентификатором участника, к которому относятся данные в строке.
Но то гда из таблицы будет необходимо выводить допустим 10 строк в которых 20 элементов. Но при этом во всей таблице будет около 10000 записей. Как в таком случае ускорить процес строк, в которых есть этот самый идентификатор? Слишал что-то об индексации, подходит он под этот случай?
Спасибо. | |
|
|
|
|
|
|
|
для: nebelll
(26.12.2008 в 23:31)
| | Я все таки подумал еще раз, почитал немного и решил что лучше я буду делать много таблиц. Дело в том, что при входе в системое определенное количество полейу пользователя, ему нужно вывести всю информацию, занесенную в таблицу, которая относится именно к этому пользователю. Или часть строк из этой таблицы.
Соответственно, если у меня будет 100 000 пользователей , у меня будет на них 100 000 таблиц, в каждой из которых будет свое определенное количество полей для каждого пользователя (так как оно может отличаться) , и одна таблица со списком всех пользователей, где будет поле с названием таблицы, которая соответствует каждому пользователю. В таком случае следующий запрос будет выводить необходимое количество строк из одной таблицы которую мы уже знаем, и в которой будет находится максимум 2000 записей и только нужные этому пользователю заполненные поля.
А если делать все одной таблицей, в ней будет максимум примерно 100 000 * 2000 = 200 000 000 записей, и при этом некоторые поля будут заполнены лишь у небольшой части пользователей, так как другим пользователям эти поля не нужны. А производить поиск всех строк, принадлежащих конкретному пользователю из таблицы с таким огромным количеством записей очень непросто, как мне кажется.
Если я правильно понимаю, мой вариант с 100 000 таблиц должен занимать меньше пространства на диске сервера за счет отсутствия пустых невостребованных полей для многих пользователей.
Да и запрос по выводу необходимых данных одного пользователя будет происходить быстрей чем в случае одной огромной таблицы.
Учитывая, что каждый пользователь сможет вызвать данный только о себе и соответственно вызываться будет лишь одна таблица на каждого пользователя, то даже в случае, если все 100 000 пользователей одновременно зайдут и сделают запрос на вывод своей информации, то MySQL должна будет вывести 100 000 таблиц - по одному разу каждую, искать будет минимум...
Если я не прав в своих рассуждениях, прошу поправить. Буду благодарен за любой ответ. Спасибо. | |
|
|
|
|
|
|
|
для: nebelll
(27.12.2008 в 05:02)
| | Совершенно однозначно, Ваш способ будет куда более затратным.
Напишите пример для двух-трех пользователей и трех-четырех необязательных свойств пользователя (очень зря Вы их здесь называете полями) .
Можно будет легко показать, что для нормальной формы схемы БД потребуется куда меньше записей, чем Вы полагаете. | |
|
|
|
|
|
|
|
для: Trianon
(27.12.2008 в 07:15)
| | Пользователь1: Математика Английский Этика Логика Украинский язык
Пользователь 2: Алгебра Геометрия Английский Немецкий Физика Химия Биология Программирование Украинский язык Украинская литература Зарубежная литература и т.д.
Пользователь 3: Черчение Економика Геометрия Мат. анализ ДПЮ + все перечисленное для 2-го пользователя | |
|
|
|