Не используйте одну таблицу. Перейти реляционные.
Я бы порекомендовал установить так называемые полиморфные отношения между вашей «основной» таблицей (таблицей с общими характеристиками) и тремя таблицами, содержащими конкретную информацию. Структура будет выглядеть примерно так:
Основной стол
- ID
- название
- ...
- имя_категории (VARCHAR или CHAR)
- category_id (INTEGER)
Таблица категорий
Поле category_name должно содержать имя таблицы таблицы конкретной категории, например. 'job_category', а category_id должен указывать на идентификатор в таблице категорий. Пример будет выглядеть так:
# MAIN TABLE
id | title | ... | category_name | category_id
-------------------------------------------------------
123 | Some title | ... | job_category | 345
321 | Another title | ... | sale_category | 543
# SPECIFIC TABLE (job_category)
id | ...
---------
345 | ...
# SPECIFIC TABLE (sale_category)
id | ...
---------
543 | ...
Теперь, когда вы запрашиваете основную таблицу, вы сразу узнаете, из какой таблицы нужно извлечь дополнительные данные, и узнаете идентификатор в этой таблице. Единственным недостатком этого подхода является то, что вам нужно выполнить два отдельных запроса для получения информации для одного элемента. Однако, вероятно, было бы возможно сделать это в транзакции.
Для извлечения данных наоборот (например, вы что-то ищете в каталоге jobs_), с другой стороны, вы можете извлечь связанные данные из главной таблицы с помощью JOIN. Не забудьте не только присоединиться к main.category_id = jobs_category.id, но и использовать столбец category_name в качестве условия соединения. В противном случае вы можете получить данные, относящиеся к одной из других категорий.
Для оптимальной производительности вы можете индексировать столбцы category_name и category_id. В основном это ускорит любые запросы, объединяющие две таблицы, как описано в предыдущем абзаце.
Надеюсь, это поможет!