ОК, я знаю, что технический ответ: НИКОГДА .
НО, бывают случаи, когда кажется, что все намного проще с меньшим количеством кода и, по-видимому, несколькими недостатками, поэтому, пожалуйста, здесьme out.
Мне нужно создать таблицу с именем Restrictions
, чтобы отслеживать, с каким типом пользователей хотят связаться, и которая будет содержать следующие 3 столбца (для простоты):
minAge
lookingFor
drugs
lookingFor
и drugs
могут содержать несколько значений.
Теория базы данных говорит мне, что я должен использовать таблицу соединений , чтобы сохранитьотслеживание нескольких значений, которые пользователь мог выбрать для любого из этих столбцов.
Но кажется, что использование значений через запятую значительно упрощает реализацию и выполнение.Вот пример:
Допустим, Пользователь 1 имеет следующие ограничения:
minAge => 18
lookingFor => 'Hang Out','Friendship'
drugs => 'Marijuana','Acid'
Теперь, скажем, Пользователь 2 хочет связаться с Пользователь 1 .Ну, во-первых, нам нужно посмотреть, соответствует ли он ограничениям User 1 , но это достаточно просто ДАЖЕ С разделенными запятыми столбцами, например:
Сначала я получу цель( Пользователь 1 ) Ограничения:
SELECT * FROM Restrictions WHERE UserID = 1
Теперь я просто помещаю их в соответствующие переменные как есть в PHP:
$targetMinAge = $row['minAge'];
$targetLookingFor = $row['lookingFor'];
$targetDrugs = $row['drugs'];
Теперь мы просто проверяем, соответствует ли ОТПРАВИТЕЛЬ ( Пользователь 2 ) этому простому критерию:
COUNT (*)
FROM Users
WHERE
Users.UserID = 2 AND
Users.minAge >= $targetMinAge AND
Users.lookingFor IN ($targetLookingFor) AND
Users.drugs IN ($targetDrugs)
Наконец, если COUNT == 1, Пользователь 2 может связаться с Пользователь 1 , иначе они не могут.
Насколько просто было ТО ?Это просто кажется действительно простым и понятным, так в чем же РЕАЛЬНАЯ проблема с этим, если я очищаю все входные данные в БД каждый раз, когда пользователь обновляет свои ограничения на контакты?Возможность использовать функцию MySQL IN
и уже хранить несколько значений в понятном им формате (например, значения через запятую) кажется намного проще, чем создавать таблицы соединений для каждого столбца с множественным выбором.И я привел упрощенный пример, но что, если есть 10 столбцов с множественным выбором?Тогда с такими множествами объединяющихся таблиц дела идут не так, как надо, в то время как метод CSV остается простым.
Так что, в этом случае действительно ТАК плохо, если я использую значения, разделенные запятыми?
**** утки ****