Необходимо создать таблицу для хранения "действий" пользователей (user_id) над "субъектами".
Субъектом может быть одно из нескольких ID разного рода, с разными собственными параметрами.
Ну, например:
Таблица subj1: subj_1_id, subj1_name, subj1_param1, ..., subj1_paramN
Таблица subj2: subj_2_id, subj2_name, subj2_param2, ..., subj2_paramM
и т.д.
В таблице действий нужно хранить user_id, тип действия (enum), какой-то набор параметров действия одинаковый для всех действий и id субъекта (subj1_id или subj2_id или...).
Как эту таблицу лучше составить, чтобы работали скажем FOREIGN KEY, не было путанницы с ID субъекта, целостность данных и пр. красота? Делать отдельную таблицу для каждого subj как-то некрасиво, да и потом с UNION'ом замучаешься получать скажем список всех действий пользователя. Для каждого subj свою колонку? Тоже как-то нерационально.
Кто как делает?
Сергей Савостин:
некоторые orm из коробки умеют создавать в таких случаях таблицу на каждый тип.
Предполагаю, что в других orm есть подобное. Все запросы генерируются автоматически.
Я не знаю баз,поддерживающих вторичный ключ из нескольких таблиц сразу.
Тут или много таблиц создавать или много столбцов. остальные генерировать руками или автоматом.
Почитаю,что другие предложат.
С Sharp: я, к сожалению (или к счастью) старой закалки - все еще пишу код и базу руками. Создать кучу таблиц - не проблема, да хоть на лету. Вопрос именно в организации структуры. Чтоб в любой момент было понятно что в базе происходит и как хранится.