Я бы полностью исключил первый вариант, потому что он требует внешней обработки или некрасивых запросов, чтобы выяснить, что происходит, и это сделает изменение работы этих маркеров позже болезненным.
Я бы использовал третий вариант: составить таблицу маркеров с любой информацией, которую вы к ним прикрепляете (по крайней мере, идентификатор и имя) и таблицу для has_marker или чего-то подобного.Для has_marker нужен только первичный ключ существующей записи и первичный ключ добавляемого маркера.Включите внешние ключи, уникальные (record_id, marker_id), если они соответствуют вашей модели данных, и рассмотрите возможность индексации обоих столбцов в качестве повышения скорости в зависимости от того, что ваш код делает с ними.
Это может быть немного громоздко, но это дает вам большую свободу для реализации и будущих изменений.Он также хранит все ваши данные в базе данных (вместо того, чтобы требовать как базы данных, так и вашей интерпретации того, что означают маркеры «9» или «1001010101» или любой другой подобной системы), и позволяет легко запрашивать данные в обоих направлениях (какие маркеры).имеет ли эта запись ИЛИ какие записи имеют эти / эти маркеры) с простыми объединениями.Наконец, добавление совершенно нового маркера с помощью этого метода тривиально - создайте новую строку в таблице маркеров и добавьте has_marker для каждой записи, которая должна иметь его.