Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > хранение одинаковых таблиц для разных юзеров


Автор: yngwie19 14.11.2009, 22:22
Здравствуйте, у меня такая задача. При регистрации на сайте, для каждого пользователя создаются 4 таблицы с названиями: table_1, table_2, table_3, table_4. Подскажите как нужно организовать структуру хранения этих таблиц? База данных у меня одна, поэтому использование таблиц с одинаковыми названиями - Я так понимаю недопустимо. Подскажите как реализуется такая задача? Спасибо.

Автор: bars80080 15.11.2009, 01:03
вот на редкость не содержательный вопрос.

что за таблицы?

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

Автор: yngwie19 15.11.2009, 01:09
bars80080, помните Я задавал вопрос по поводу таблиц? Я решил по совету участников форума хранить эту информацию в таблицах базы данных. Однако у каждого пользователя будет свой(персональный) набор этих данных, но таблицы Я хочу называть одинаково для всех
Цитата(yngwie19 @  14.11.2009,  22:22 Найти цитируемый пост)
названиями: table_1, table_2, table_3, table_4

Да еще забыл добавить все 4 таблицы будут иметь между собой связи.

Автор: bars80080 15.11.2009, 01:25
Цитата(yngwie19 @  15.11.2009,  00:09 Найти цитируемый пост)
днако у каждого пользователя будет свой(персональный) набор этих данных

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

Автор: MoLeX 15.11.2009, 09:01
Цитата(yngwie19 @  14.11.2009,  22:22 Найти цитируемый пост)
При регистрации на сайте, для каждого пользователя создаются 4 таблицы с названиями: table_1, table_2, table_3, table_4. 

10.000 пользователей, следовательно 40.000 таблиц.
Извините, но это бред.

Автор: skyboy 15.11.2009, 09:34
Цитата(MoLeX @  15.11.2009,  08:01 Найти цитируемый пост)
10.000 пользователей, следовательно 40.000 таблиц.

Цитата(bars80080 @  15.11.2009,  00:25 Найти цитируемый пост)
как из этого следует, что для пользователей должны быть разные таблицы?

вот завелись-то smile просто похоже впервые в жизни использует базу данных.
yngwie19, как тебе подсказывает bars80080, должно быть четыре таблицы. В каждой(или же только в некоторых из них - ты говоришь, что таблицы связанные) добавь поле("колонку") id_user, в котором будет храниться для каждой записи("строки") таблицы указание на то, к какому пользователю относятся данные.

Автор: yngwie19 15.11.2009, 17:51
skyboy, спасибо Я понял!

Автор: WolfAlone 18.11.2009, 09:45
Попробуйте сделать так:
Создавайте таблицы дописывая в конец названия идентификационный номер пользователя. Например: table1_userID038 или table1_userName. С остальными таблицами по аналогии.

Идентификаторы пользователей можно брать из общей таблицы, в которой будет содержаться, например всего 2 поля, UserID и UserName.

P.S. Уверен, что данную задачу можно решить и более рационально, но это первое, что пришло мне в голову в ответ на Ваш вопрос.

Автор: MoLeX 18.11.2009, 10:01
WolfAlone, тему прочитай еще раз, внимательно посмотри на доводы и пойми что ты сказал

Автор: WolfAlone 18.11.2009, 10:21
MoLeX, да, Вы правы. Не дочитал до конца... smile

Хранение таблиц с одинаковыми именами в БД - невозможно. Т.к. управляющая БД программа (сервер БД) - не сможет идентифицировать, к какой именно таблице Вы хотите обратиться (К моему великому сожалению, в современные серверы БД не запрограммированы телепатические способности smile )! Так же как в одном каталоге не могут лежать 2 файла с 100% одинаковыми именами (и расширением).

P.S. Во всём остальном - полностью согласен со всем выше написанным.

Автор: Ипатьев 18.11.2009, 10:36
WolfAlone, при чем здесь одинаковые имена?
Речь идет о том, что база данных - это не набор текстовых файлов. И она работает совсем по другим законам. 
По которым создание тыщи одинаковых таблиц - преступление.

Цитата(WolfAlone @  18.11.2009,  09:45 Найти цитируемый пост)
но это первое, что пришло мне в голову в ответ на Ваш вопрос. 

Совсем не обязательно писать глупость только потому, что она только что пришла в голову.

Добавлено через 10 минут и 6 секунд
yngwie19, кстати, если вы еще заходите в этот топик.
Было бы неплохо, если бы вы показали здесь стркуктуру этих таблиц.
Наверняка там найдется, что исправить и изменить.
Раньше, чем вы начнете заполнять эти таблицы данными и напишете для работы с ними код.

Автор: WolfAlone 18.11.2009, 11:05
Цитата(Ипатьев @  18.11.2009,  10:36 Найти цитируемый пост)
Совсем не обязательно писать глупость только потому, что она только что пришла в голову.

Какие ещё основания должны быть для написания глупостей?

Я всего навсего выражаю собственное мнение. Которое, как и всякое другое имеет право на своё существование! В моей жизни мне не встречался ни один человек, который не делал бы глупостей и не ошибался бы ни разу. Но совершенно не обязательно корить его в этом (ИМХО)!

Автор: Ипатьев 18.11.2009, 11:33
Для написания глупостей никаких оснований не нужно.
А вот для того, чтобы промолчать или задать вопрос "а как правильно" - основания нужны, да. И очень желательно, чтобы они у вас появились.

В принципе, вы имеете право на высказывание своего мнения. 
Но лучше его сначала адекватно оценить, и потом решить - стоит ли его высказывать, или лучше поинтересоваться правильным ответом.

Проблема в том, что для вас любая информация - мнения. А надо бы, чтобы это были знания.

Обсуждаемый вопрос относится к азбуке баз данных.
Данные в базе должны лежать в строго определенной форме. В частности, все однородные данные должны лежать в одной таблице. 


Автор: capitan 18.11.2009, 12:06
yngwie19,  Как то сталкивался с такой задачей. Таблицы создавались по такому алгоритму:
Код

getUserTable($uid){
    $uid = intval($uid);
    $table_id = $uid % 100;
    return 'table_' . $table_id;
}


При таком методе будет создано 100 таблиц. Но с ними очень тяжело работать, если придется делать выборку из всех таблиц сразу. Т.ч. думайте. Данный метод имеет на жизнь для хранения , например, фотографий пользователей.
Код

function getUserFolder($uid){
    $uid = intval($uid);

    $topFolder = $uid % 100;

    if ( !is_dir(SITE_DIR . 'users/' . $topFolder) ){
        mkdir(SITE_DIR . 'users/' . $topFolder);
    }

    if ( !is_dir(SITE_DIR . 'users/' . $topFolder . '/' . $uid) ){
        mkdir(SITE_DIR . 'users/' . $topFolder . '/' . $uid);
    }

    return 'users/' . $topFolder . '/' . $uid;

}

Автор: Ипатьев 18.11.2009, 12:43
capitan, он уже подумал. И и не стал делать тыщу одинаковых таблиц.
А "данный метод" к базам данных не имеет никакого отношения.


Автор: MoLeX 18.11.2009, 12:47
Модератор: закрыта

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)