У меня есть довольно типичную установку таблицы пользователя для моего веб-приложения:Таблица друзей - хранить идентификаторы пользователей или имена пользователей?
user_id | username
--------------------
0 greg
1 john
... ...
Оба поля индексируются и уникальным, так что я могу смотреть на пользователя с идентификатором пользователя или быстро.
Я хочу сохранить таблицу друзей, и я не уверен, следует ли сохранять значения user_id или имена пользователей в этой таблице:
user_id_1 | user_id_2
--------------------------
or
username_1 | username_2
--------------------------
Я буду хотеть, чтобы получить список друзей для пользователя, поэтому было бы удобно сразу иметь имена пользователей в таблице друзей вместо того, чтобы делать присоединиться на столе пользователей:
select * from friends where username_1 = 'greg';
Если я хранить идентификаторы пользователей, мне нужно сделать присоединиться, то, чтобы получить имена пользователей - будет ли это дорогостоящим ?:
select * from friends
where user_id_1 = x
join users where user_id = { all those results }
Использование идентификаторов пользователей позволяет мне гибко изменять имена пользователей, но я не позволяю им это делать. Будем признательны любому совету.
Благодаря
О, и вы можете избежать этого внутреннего запроса что-то вроде: 'выбрать * из друзей е внутреннего объединения пользователей Мириэля (f.user_id2 = u.user_id), где f.user_id1 = [id] ' –
Да, у моих пользователей, вероятно, не будет более 50 друзей. – user291701