Intereting Posts
Выпадающий каскад с использованием JS не работает Как скопировать таблицу из одной базы данных mysql в другую базу данных mysql Отправка файлов cookie, хранящихся на глобальном уровне $ _COOKIE, с использованием PHP curl Получить последние рекурсивные файлы с помощью PHP Ссылка php на файл изображения за пределами веб-каталога по умолчанию Тернарные операторы в Twig php (сокращенная форма if-then-else) сделать номер телефона доступным для вызова экрана на мобильном телефоне? ZF2 – необходимо отобразить конкретное сообщение об ошибке при отказе определенного состояния update_post_meta для WordPress Yoast SEO Класс Symfony2, не найденный в цепочке, в двух связках Пример веб-службы php javascript windows alert с функцией перенаправления Заголовок PHP не работает – Страница отображается как обычно Заявление о выборе CodeIgniter с предложением Where установка обложки альбома mp3 с php

Многие строки базы данных против одной строки разделенных запятыми строк

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

У меня есть два варианта:

Имеют отдельные ряды для каждой дружбы.

+----+-------------+-------------------+ | ID | User_ID | Friend_ID | +----+-------------+-------------------+ | 1 | 102 | 213 | | 2 | 64 | 23 | | 3 | 4 | 344 | | 4 | 102 | 2 | | 5 | 102 | 90 | | 6 | 64 | 88 | +----+-------------+-------------------+ 

Или сохраните всех друзей в одной строке как CSV

  +----+-------------+-------------------+ | ID | User_ID | Friend_ID | +----+-------------+-------------------+ | 1 | 102 | 213,44,34,67,8 | | 2 | 64 | 23,33,45,105 | +----+-------------+-------------------+ 

При поиске друзей я могу создать массив с помощью функции explode() однако удаление пользователя было бы сложнее.

Изменить: для второго метода я бы разделил каждый id в массиве в php для таких функций, как подсчет и другие.

Какой метод, по вашему мнению, лучше?

Solutions Collecting From Web of "Многие строки базы данных против одной строки разделенных запятыми строк"

Первый метод определенно лучше. Это то, что делает реляционные базы данных отличными 🙂

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

Скажите, что вы хотели написать запрос, чтобы пользователи могли видеть, кто у них был как друг. Второй метод потребует от вас использовать IN () и будет намного медленнее, чем просто использовать JOINS.

Первый метод лучше всего во всех отношениях. Мало того, что вы будете использовать индексы БД, чтобы быстрее находить записи, это значительно упростит внесение изменений.

Нарушение первой нормальной формы обычно нежелательно, поскольку

  1. Легко для Orpahned ids
  2. Легко вставлять недопустимые типы данных
  3. Обновления могут потребовать полного сканирования таблицы
  4. Увеличивает проблемы параллелизма
  5. Невозможно создать ключ (user_id, friend_id)

Используйте силу реляционной базы данных. Определенно идти с первым подходом. MySQL быстрее, чем вы думаете, и он регулярно занимается ОЧЕНЬ большими наборами данных.