Является ли хорошей идеей иметь несколько FK в одном поле в MySQL? - PullRequest
0 голосов
/ 27 февраля 2009

Я настраиваю базу данных, и мне интересно иметь систему друзей в стиле Facebook. Мой первоначальный план состоял в том, чтобы иметь такой стол:

uid  friends
4    30,23,12,33
30   54,92,108

со всеми этими числами от FK до таблиц с пользовательской информацией. Мне сказали, что это нецелесообразно и практически невозможно, поскольку MySQL будет иметь дело только с FK, если они единственные, кто помещен в ячейку. Так может что-то вроде этого?

uid(PK) friend
4        30
4        23
4        12
30       54
30       92
30       108

ЭСТ. Разве это не оставит меня с огромным количеством строк? (десятки тысяч?) Разве первая техника не стоит этого с точки зрения времени и эффективности?

Ответы [ 4 ]

5 голосов
/ 27 февраля 2009

10 тысяч строк - это арахис, даже для Mysql. Нет другого способа смоделировать отношения «многие ко многим». Эти идентификаторы будут иметь индексы, которые на много порядков работают лучше, чем сравнение подстрок.

2 голосов
/ 27 февраля 2009

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

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

1 голос
/ 27 февраля 2009

Не стоит времени и эффективности? Вы получите гораздо большую эффективность, если будете использовать второй метод.

0 голосов
/ 30 июня 2011

Для более теоретического объяснения, почему это плохо, прочитайте http://en.wikipedia.org/wiki/First_normal_form

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