Базовое структурирование базы данных MySQL - PullRequest
1 голос
/ 20 февраля 2011

Я довольно новичок в MySQL, и мне нужна помощь по относительно простому вопросу.

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

Прав ли я в этом?Или я что-то упустил?

Вот моя текущая общая идея (которая мне довольно не нравится):

table people_list {
  person_id (auto-increment)
  name
  age
  race
  ...
}

table friends_lists {
  friendship_id (auto-increment)
  person_id1
  person_id2
}

Обратите внимание, что я только что создал синтаксис по существу MySQL для демонстрации.1010 *

Есть ли лучший способ?

Ответы [ 2 ]

1 голос
/ 20 февраля 2011

Ваш подход правильный ... нет другого способа сделать это, кроме вспомогательной таблицы (friends_lists в вашем сценарии).Вот как можно достичь отношения «многие ко многим» между двумя таблицами.

В вашем случае две таблицы одинаковы (people_list), но концептуально ониможно считать «друзьями» и «людьми»

Но могу ли я дать вам несколько советов об этом подходе?

1 - Каждая таблица, в некотором смысле, является «списком»,Итак, почему суффикс "_list"?Не, по той же причине мы не используем множественное число для имен таблиц (его продукт, а не продукт * s *. Конечно, где будет много;)

2 - вместо использования авто-Инкрементный идентификатор у друга, превратить и person_id1, и person_id2 в первичный ключ.Вы избавляетесь от бесполезного столбца И, таким образом, гарантируете, что каждая пара Person X - Friend Y уникальна.

3 - Дайте person_id1 и 2 значащим именам на основе контекста, например, «person_id» и «friend_id"

Подводя итог:

table person {
  person_id (auto-increment, primary key)
  name
  age
  race
  ...
}

table friend {
  person_id (foreing key from person, primary key)
  friend_id (foreing key from person, primary key)
}
1 голос
/ 20 февраля 2011

Почему бы не

table people_list {
  person_id (auto-increment)<
  name
  age
  race
  ...
}

table person_friend {
  person_id(of person)
  person_id(of friend)
}

Взгляните на это , чтобы лучше понять отношения один-ко-многим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...