Вы находитесь здесь: Главная > Программирование > Профили пользователей

Профили пользователей

. . . . .

ayf1Может быть, вы заметили, что таблица users (листинг 3.1) не содержит ника­кой полезной информации о самих пользователях — ни имен, ни адресов элек­тронной почты. Для хранения этих данных будет создана егце одна таблица — users_profile.

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

Каждая запись в такой таблице будет соответствовать одному значению одного параметра пользовательского профиля. Другими словами, одна запись соответст­вует адресу почты, другая — имени и т.п. Извлечение этих данных в ходе работы сайта несколько более затратно, чем в других случаях, но гибкость хранения ин­формации компенсирует эти затраты. Таблица должна иметь три столбца:

■   user_id — ссылка на пользователя, т.е. запись в таблице users;

■  profile_key— имя (определение) параметра, который хранится в данной записи; например, для записей, в которых хранятся адреса электронной почты, логично использовать имя email;

■  prof ile_value — собственно значение параметра; если значение поля рго- f ile_key равно email, текущее поле будет содержать сам адрес.

Совет

Полю prof ile value у нас назначен тип text, поскольку это позволяет при необходимости сохра­нить в нем большое количество информации. В СУБД MySQL и PostgreSQL нет разницы в быстродействии при работе с типами varchar и text. На самом деле MySQL даже создает внутреннее поле varchar в качестве наименьшего возможного поля типа text, в зависимости от указанного размера.

В листинге 3.2 показано определение таблицы users prof ile. Код по управле­нию профилями пользователей будет реализован несколько позже в этой главе.

Листинг 3.2. Запрос SQL для создания таблицы usersprof ile в MySQL (файл schema-mysql. sql)

create table users_profile (

user_id         bigint unsigned not null,

profile_key varchar (255) not null, profile_value text                             not null,

primary key (user_id, profile_key), foreign key (user_id) references users (user_id) ) type = InnoDB;

t

Как говорилось ранее, тип поля serial (используемый в поле user id, см. листинг 3.1)— это условное обозначение целочисленного типа bigint без знака, с автоприращением. Поскольку поле user id в данной таблице ссылается на таблицу users, необходимо использовать тип bigint unsigned— автопри­ращение от этого поля здесь не требуется. Первичными ключами в таблице users_prof ile выбраны user_id и prof ile key, поскольку параметры профиля не могут повторяться для одного пользователя. А вот несколько различных пара­метров пользователь вполне может иметь.

Примечание

При работе с PostgreSQL для поля user_id используется тип данных int. поскольку именно на нем ос­нован тип serial в PostgreSQL. Напомним, что версия таблицы для PostgreSQL определена в файле

schema-pgsql.sql.

. . . . .
  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • Twitter
  • RSS

Оставить комментарий

This blog is kept spam free by WP-SpamFree.

. . . . . . . . . . . . . . . . . . . .