2012-07-03 3 views
0

Я пытаюсь сделать это следующим образом:Каждый пользователь имеет различные «структуру», используя только один стол

Каждый пользователь может выбрать поля (например, структуры на MySQL), где эти поля могут обработать их соответствующее значение, то как делать БД внутри БД.
Но как я могу это сделать, используя одну таблицу?
(не говоря о пользовательских учетных записях и т. Д., Где я должен уметь использовать указатель на его собственную «структуру»)

Сделайте что-нибудь вроде: varchar Ключ, где зарегистрировать что-то вроде «Имя: asd», где PHP взорвался: чтобы получить соответствующая структура («имя» в этом случае) и соответствующее значение? ('asd') Использовать BLOB? может кто-то включить свет для меня? Я не знаю, как сделать что-то, где работает лучше, чем мое текущее объяснение ...

Я знаю, что мой текст запутан и извините за любой плохой английский.

EDIT:
Кроме того, они могут добавить несколько ключей/«структуры», где принимает новое значение
И они не в состоянии видеть базы данных или таблицы, они по-прежнему обычные пользователи
Мой сервер не поддерживает Postogre

+0

Уверены, что не будет абсолютно никаких отношений, предварительно заполненных ящиков и т. Д.? –

+0

В чем проблема с одним из них? Я все еще могу сделать это на «userinfo» – PedroGabriel

ответ

2

По-моему, вы должны создать две таблицы.

  1. с информацией пользователя
  2. с 3 полями (идентификатор пользователя, ключ и значение)

Каждый пользователь имеет 1 запись в первой таблице. Во второй таблице каждый пользователь может иметь 0 или более записей. Это гарантирует, что вы все равно сможете выполнять поиск данных и чтобы пользователи могли легко добавлять дополнительные пары ключ/значение, когда это необходимо.

+0

Две «базы данных»? Думаю, вы имеете в виду таблицы? –

+1

@OcasoProtal Эй, это все еще довольно рано :) Спасибо! – PeeHaa

+1

Это ответ. Две таблицы и запрос соединения. – shxfee

0

Используйте таблицу с парами ключ-значение. Так три колонки:

  • идентификатор пользователя
  • ключ ("имя")
  • значение ("ASD")

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

1

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

Другое дело, чтобы проверить что-то вроде: http://www.postgresql.org/docs/8.4/static/hstore.html

Не пытайтесь строить таблицы, как: записей, полей, типы полей и т.д. Это плохая практика, и не должны быть необходимы.

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

1

Хотя я считаю, что рациональный ответ на этот вопрос - тот, который задан PeeHaa, если вы действительно хотите, чтобы данные вписывались в одну таблицу, вы можете попробовать сохранить сериализованный массив PHP в одном из полей. Проверьте serialize и unserialize

Формирует Storable представления значения

Это полезно для хранения или передачи значений PHP без потери вокруг их типа и структуры.

Этот метод обескуражен, поскольку он вообще не масштабируется.

0

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

У вас может быть одна таблица с полем varchar. Затем вы сохраняете сериализованные данные структуры поля и их значение в этом поле. Когда вы хотите получить структуру, запросите данные и де-сериализуйте данные поля varchar.

Насколько я знаю, каждый язык программирования поддерживает сериализацию и де-сериализацию.

Отредактировано: Это не масштабируемый вариант.

+0

Хотя это возможно, обратите внимание, что это не рекомендуется. – PeeHaa

+0

@PeeHaa спасибо, ты прав. Это не масштабируемый вариант. Я только что редактировал сообщение. –

Смежные вопросы