2013-05-07 2 views
0

Я создаю систему друзей для своего сайта. Я собираюсь сделать только 2 строки, добавить индекс для каждого из них и сделать их внешними ключами в таблице usersid. Я бы хотел, чтобы они были удалены, если один из пользователей удален. Затем будет запись для каждого пользователя.mysql friend system, index, foreign key, prim key

user_id 
friend_id 
  1. Вопрос: Видите ли вы какой-либо причине на все, чтобы включать в себя первичный ключ?

  2. Вопрос: будут ли внешние клавиши работать, как описано выше, при настройке их на каскад?

Если у вас есть какие-либо другие советы или колонки предложения, я хотел бы услышать, что тоже ((мне не нужно знать, когда дружба началась)

Thankyou

ответ

1

Абсолютно вы! нужен первичный ключ. В этом случае лучше всего использовать составной первичный ключ в обоих столбцах. Без него ваши запросы будут МНОГО медленнее, чем они должны быть, и вы не сможете обеспечить уникальность пары друзей.

Другая вещь, которую вы должны учитывать r является ли отношение друг к другу односторонним или двусторонним. Другими словами, вам нужно иметь возможность искать отношения друзей в любом направлении (начиная с любого пользователя). Если это так, вам, вероятно, потребуется вставить две строки в эту таблицу для каждого отношения друзей.

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

+0

Хороший ответ. Но у меня возникли проблемы с пониманием того, каким будет использование, если бы я добавил столбец с именем id, который был первичным ключом, когда я никогда не буду искать таблицу из этого идентификатора. Как это могло бы улучшить производительность? У меня есть указатель на user_id, который я бы «ссылался» на предложение where моего оператора select. Не то, чтобы у меня была проблема с добавлением id, я просто хотел бы понять, почему. – jah

+0

@JensAhlstenHerlevsen Я не предлагаю добавить столбцы первичного ключа автоинкремента. Я специально упомянул составной первичный ключ, используя эти два столбца. Вы можете применять уникальность в паре, и вы всегда смотрите 'user_id', и это первый столбец в индексе, вам не нужен отдельный индекс для user_id сам по себе. У вас всегда должно быть что-то среднее на каждом столе. –

+0

Друзья ALTER TABLE ADD PRIMARY KEY (user_id, friend_id); Это также означает, что комбинация из двух столбцов будет уникальной? – jah