Как избежать повторения при вставке данных?

#php #mysql #repeat

#php #mysql #повторить

Вопрос:

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

Однако, если мы разрешим всем пользователям добавлять свои собственные категории, у нас могут возникнуть такие проблемы, как:

Пользователь A вставляет категорию под названием: Фрукты

Пользователь B вставляет категорию под названием: Еда с деревьев

(это фиктивный пример, но, возможно, вы поняли проблему).

Вообще говоря, какие способы у нас есть, чтобы избежать повторения в нашей системе?

Я совершенно не осведомлен о том, какие у нас могут быть способы, поэтому некоторые ресурсы, ссылки, что угодно, более чем приветствуются.

Большое спасибо.

Ответ №1:

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

Комментарии:

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

2. @MEM автоматическое решение, которого можно избежать, food from trees когда fruits существует?! Вероятно, вам потребуется меньше времени на модерацию, чем на написание этого алгоритма 🙂

3. @MEM: Ваш пример потребовал бы, чтобы машина IBM Watson лингвистически рассуждала о потенциальных совпадениях в значении между «Фруктами» и «Едой с деревьев». Даже профессиональным философам-людям, работающим над онтологиями, было бы трудно разобраться в вашем примере. Действительно, как носитель английского языка, я не могу понять, одинаковые они или разные.

4. @MEM: «у нас нет повторения». Я предполагаю, что вы шутите по этому поводу. Объясните разницу (если возможно) между [модульным тестированием] и [TDD]. Совпадение по смыслу? Нет перекрытия? И как бы вы сказали? Какой тест вы бы — как человек — использовали, чтобы определить, являются ли они дубликатами?

5. @MEM Это также зависит от того, насколько общей / открытой является ваша система, возможно, решением было бы предоставить всем пользователям их собственные категории и ограничить их только своими собственными. В конце концов, количество категорий будет составлять лишь часть от количества продуктов.

Ответ №2:

Если так я понимаю:

Во-первых, рекомендуемое название категории, если пользователь начнет вводить «fru», отобразит существующую категорию ухода, называемую «фрукты» и т.д.

Я использую псевдонимы, например:

Категории таблиц:

 id (serial)
name (varchar)
aliasof (bigint)
  

Из серверной части я добавляю список новых категорий, и, если существует, устанавливаю связь:

Супозировать:

 1 fruits         0
2 fruits of tree 1
  

Комментарии:

1. Спасибо. Пользователи, к сожалению, не разбираются в технических вопросах, и обычно они просто вставляют, несмотря ни на что, ДАЖЕ ЕСЛИ мы представим им несколько альтернатив и предупредим их: «пожалуйста, избегайте введения новых данных, если у вас здесь перечислены похожие». На самом деле в этом и заключается проблема. 🙂

Ответ №3:

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

Комментарии:

1. Потрудитесь объяснить немного больше. Основная причина, по которой нам нужно избегать этого, заключается в том, чтобы: а) разрешить сравнение (позже) б) избежать мусора базы данных.