Я сделаю все возможное, чтобы изложить это в тексте.По сути, у нас есть приложение, которое отслеживает действия пользователей.Каждое действие имеет свою собственную таблицу, поскольку каждое действие имеет различные параметры, которые необходимо сохранить.Это позволяет нам хранить эти дополнительные атрибуты и довольно легко запускать аналитику для действий нескольких или одного пользователя.Действия на самом деле не связаны друг с другом, кроме того, кем пользователь выполнял эти действия.
Пример:
- ActionTableA Id |UserId |АтрибутA |Атрибут B
- ActionTableB Id |UserId |АтрибутC |АтрибутD |АтрибутE
- ActionTableC Id |UserId |AttributeF
Далее нам нужно присвоить значение каждому действию, выполняемому пользователем, и сохранить промежуточный итог этих значений.
Пример: ValueTable: Id |UserId |Значение |ActionType |ActionId
Как лучше всего связать значение в таблице значений с фактическим выполненным действием?Мы знаем тип действия (A, B, C), но с точки зрения разработки SQL я не вижу хорошего способа иметь индексированную связь между значениями действий в ActionsTable и самими действующими действиями.Единственное, что имеет смысл, это изменить ValueTable следующим образом:
ValueTable
Id |UserId |Значение |ActionType |ActionAId (FK Nullable) |ActionBId (FK Nullable) |ActionCId (FK Nullable)
Но проблема, с которой я столкнулся, заключается в том, что только один из 3 столбцов actionTableId будет иметь значение, остальные будут иметь значение Null.Кроме того, по мере добавления типов действий столбцы в таблице значений также будут.Наконец, чтобы программно найти данные, я бы либо: а) должен проверить ActionType, чтобы получить соответствующий столбец для идентификатора, либо б) отсканировать строку и выбрать ненулевой actionId.
Есть ли лучший способ / дизайн или это просто «так, как есть» для этой конкретной проблемы.
РЕДАКТИРОВАТЬ
Прикрепленный являетсядиаграмма вышеупомянутой установки:
Извините за вопросы ясности, ввод вопросов SQL всегда труден.Поэтому я думаю, что ваш комментарий дал мне представление о чем-то ... Я мог бы иметь таблицу SystemActionId, которая по существу имеет автоматически сгенерированное значение
SystemActions : Id |Введите
Затем каждый ActionTable будет иметь дополнительный FK к таблице SystemAction.Наконец, в ValueTable - свяжите его с таблицей SystemActions.Это позволило бы нам привязать ценности к конкретным действиям.Мне нужно было бы присоединить таблицы действий к таблице системных действий, где
JOIN (((SystemActions.Id = ActionTableA.Id) JOIN (SystemActions.Id = ActionTableB.Id)) JOIN (SystemActions.Id = ActionTableC.Id)
дерьмовый быстрый синтаксис sql
Это то, что вы былинамекает на ответ ниже?Снимок того, как это может выглядеть потенциально: