Каковы лучшие методы для удаления "друзей" из базы данных? - PullRequest
3 голосов
/ 16 июля 2010

Скажем, у вас есть схема таблицы, такая как: friends(friendship_id, uid1, uid2, are_friends).

Когда один друг не дружит с другим человеком, лучше ли удалить эту строку из базы данных (и сбросить автоинкремент)? Или вам следует просто изменить статус are_friends на 'N' ?

Мне бы очень хотелось узнать, что вы думаете и почему.

РЕДАКТИРОВАТЬ: Моя основная задача - показать некоторую информацию о состоянии друзей, а также показать, кто кого подружился. Таким образом, во время добавления, я могу уведомить друзей о просьбе фрайдера, но пока не хочу, чтобы они были друзьями.

У меня изначально был are_friends как большой ENUM с большим количеством опций. Но в этом ENUM у меня были варианты, такие как removed и blocked, и я не был уверен, действительно ли это были полезные данные или нет. Любые дальнейшие мысли о преимуществах наличия большего или меньшего количества данных?

Кроме того, еще один вопрос, который у меня возник с тех пор, как я написал, - как не дублировать дружбу. Вы должны сделать (uid1, uid2) первичным ключом?

Ответы [ 5 ]

7 голосов
/ 16 июля 2010

Существуют ли какие-либо данные, связанные с записью friend, которые вы, возможно, захотите восстановить, если пользователь повторно подружится с другим пользователем?

Если вы хотите отследить их историю или сохранить некоторые метаданные, связанные с их отношениями, сохраните запись.

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

2 голосов
/ 16 июля 2010

типичные отношения N: M:

Вам не нужны поля friendship_id и are_friends в таблице отношений.Таким образом, если связь в таблице присутствует, то пользователи являются друзьями, в противном случае нет.

Хранение «не друзей» бесполезно.Если не описан случай @ fencliff

И что бы вы ни делали: никогда не сбрасывайте автоинкремент, пока вы не сбросите всю базу данных.

1 голос
/ 16 июля 2010

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

0 голосов
/ 16 июля 2010

Я бы сказал, что это зависит, прежде всего, от потребностей вашего бизнеса.Если вам нужно следить за тем фактом, что эти два человека были друзьями, а когда-то их нет, вам нужно сохранить строку в своей БД, возможно, добавив еще несколько столбцов, которые могут вас заинтересовать (когда они стали друзьями,когда они перестали быть друзьями и т. д.).В противном случае вам не нужен этот ряд, поэтому его лучше удалить.Конечно, в этом случае вам также не нужен столбец are_friends, так как все строки, существующие в вашей базе данных, будут соответствовать друзьям, являющимся друзьями.

0 голосов
/ 16 июля 2010

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

...