2012-03-11 2 views
0

мне нужна небольшая помощь в создании структуры базы данных MySQLЗастрял в структуризации базы данных

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

Пользователь может понравиться как многие мультяшный персонаж, а персонаж мультфильма может понравиться n числу пользователей.

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

Это моя первая структура базы данных, поэтому, пожалуйста, помогите мне

ответ

1

Наиболее распространенным подходом является использование отдельной таблицы отношение, то есть

create table users_cartoons (user_id int, cartoon_id int) 

и хранить все отношения между пользователями и мультиков там.

+0

, но это сделает стол действительно тяжелым, как если ПользовательА понравился Микки, USERB любил Дональд и Микки userC понравился этот способ Микки или любой другой символ будет повторяться и сделать длинный список. Будет ли это хорошим способом? – Nick

+0

@Nick: Совсем наоборот, это самая легкая структура, возможная с точки зрения используемого пространства. Да, символы будут повторяться, но в вашей структуре они будут повторяться повторно, а отдельная таблица - самый легкий способ сохранить такие отношения - просто убедитесь, что вы храните идентификаторы (уникальные целочисленные значения), а не имена для пользователей и символов. –

+0

Хорошо, только скажи, что будет лучшим решением среди этого: - База данных с 1000 + таблиц мультфильма ИЛИ База данных с 10 таблицами, но одним столом с длинным списком дублирования строк. – Nick

1

Вам нужны три таблицы: таблица пользователей, таблица мультфильмов и таблица UsersCartoons.

Пользователи имеют всех ваших пользователей (идентификатор, имена пользователей и т. Д.). У мультфильмов есть все мультфильмы (идентификатор для каждого и любые другие свойства, которые вы хотите сохранить).

Тогда таблица UsersCartoons имеет поле user_id и поле cartoon_id. Вы можете добавить столько строк, сколько хотите, к этой таблице, поэтому каждый мультфильм может понравиться русским пользователям и наоборот.

+0

@Nick, у меня нет репутации, чтобы прокомментировать вашу нить ниже с Сергеем, но, чтобы ответить на ваш вопрос, одна таблица отношений (например, UserCartoons) будет быстрее, чем отдельная таблицу для каждого мультфильма по нескольким причинам. Во-первых, что, если вы хотите, чтобы каждый мультфильм понравился пользователю? Если у каждого мультфильма есть своя таблица, вы должны объединить результаты многих таблиц, что очень медленно. Во-вторых, MySQL может создавать индексы за кулисами, которые не включают дубликаты, поэтому каждый раз они не будут искать каждую строку. – Ethan

1

Это упрощенная версия структуры, которую я, скорее всего, буду использовать.

Я считаю, что лучше поддерживать базу данных таблиц, которая описывает данные в ней, а не что-то вроде user_cartoon, что часто является очень смутным представлением.

`user` 
+-------+---------+------+-----+---------+----------------+ 
| Field | Type | Null | Key | Default | Extra   | 
+-------+---------+------+-----+---------+----------------+ 
| id | int(11) | NO | PRI | NULL | auto_increment | 
+-------+---------+------+-----+---------+----------------+ 

`cartoon_character` 
user_id denotes the creator or owner 
+---------+---------+------+-----+---------+----------------+ 
| Field | Type | Null | Key | Default | Extra   | 
+---------+---------+------+-----+---------+----------------+ 
| id  | int(11) | NO | PRI | NULL | auto_increment | 
| user_id | int(11) | NO |  | NULL |    | 
+---------+---------+------+-----+---------+----------------+ 

`cartoon_character_like` 
+----------------------+---------+------+-----+---------+-------+ 
| Field    | Type | Null | Key | Default | Extra | 
+----------------------+---------+------+-----+---------+-------+ 
| cartoon_character_id | int(11) | NO | PRI | NULL |  | 
| user_id    | int(11) | NO | PRI | NULL |  | 
+----------------------+---------+------+-----+---------+-------+ 
Смежные вопросы