Поэтому я хочу, чтобы мои пользователи могли ограничивать, кто может с ними связаться.
Существует несколько факторов, которые они должны фильтровать, включая возраст (например, должно быть от 18 до 29 лет), доход (должен зарабатывать от 25 000 до 60 000 долларов США), что они ищут (например, «Дружба», «Повесьте» и т. Д.), какие наркотики они делают (марихуана, мет, кокаин и т. д.) и т. д.
Проблема в том, что я хочу, чтобы они могли выбирать и хранить несколько вариантов для некоторых критериев (например, лекарств), но я не знаю, как я должен хранить это в БД или как я должен структурировать таблицу, чтобы наилучшим образом выполнить эту ,
Например, как я могу хранить строку пользователя, которая для «наркотиков» выбрала «Марихуана», «Кокаин» и «Героин» в этом контексте? Я бы просто сохранил их как значения, разделенные запятыми, в столбце «Drugs»? Или я должен делать это совершенно по-другому?
Какой был бы лучший способ сделать это (учитывая, что мне, очевидно, придется извлекать и проверять эту информацию каждый раз, когда пользователь хочет связаться с другим пользователем) и почему?
Нет, не сохраняйте значения в формате CSV в базе данных. Вместо этого создайте таблицу соединений, называемую user_drug
и сохраните одну строку для каждой комбинации пользователей / наркотиков:
user id name income 1 Foo 10000 2 Bar 20000 3 Baz 30000 drug id name 1 Marijuana 2 Cocaine 3 Heroin user_drug user_id drug_id 1 1 1 2 2 1 2 3 3 3
Столбец БД (по крайней мере теоретически) НЕ должен содержать несколько значений. К сожалению, есть некоторые программисты, которые хранят несколько значений в одном столбце (значения, разделенные запятой для примеров) – эти программисты (в большинстве случаев) разрушают концепцию БД и SQL.
Я предлагаю вам прочитать о нормализации базы данных, чтобы начать работу с вашими таблицами. И сделайте все возможное, чтобы достичь третьей нормальной формы Кодда
Вы можете попробовать:
criterium ------------ user_id type value 1 AGE_MIN 18 1 AGE_MAX 29 1 INCOME_MIN 25000 1 INCOME_MAX 60000 1 DRUGS Marijuana 1 DRUGS Meth