alexfedoseev
@alexfedoseev
React & Rails Dev

Rails + PostgreSQL: integer и decimal данные в одной таблице — совместить в одну колонку или разнести в разные?

Мой Rails engine, использующий PostgreSQL, импортирует статистику по нескольким метрикам из Google Analytics:
  • Visitors - int
  • Goal 1 Completions - int
  • Goal 2 Completions - int
  • Goal N Completions - int
  • Transactions Amount - int
  • Transactions Revenue - decimal

Это engine, который будет монтироваться к разным клиентским сайтам. И в будущем, кроме целей и e-commerce данных, там может оказаться всё что угодно (например, социальные метрики и т.д.). Поэтому моя задача сделать архитектуру максимально гибкой: типы метрик должны добавляться не через изменение архитектуры БД, а через внесение в справочник метрик новых типов (чуть ниже есть визуализация схемы).

Вот как выглядела бы таблица со статистикой по метрикам в базе, если бы все метрики были int:
  • id - int
  • date - date
  • metric_id - int
  • metric_amount - int

Но есть Transactions Revenue (деньги), который decimal, и у меня есть 2 пути:

Путь #1. Сделать все metric_amount decimal
  • id - int
  • date - date
  • metric_id - int
  • metric_amount - decimal
Путь #2. Добавить nullable колонку для Revenue
  • id - int
  • date - date
  • metric_id - int
  • metric_amount - int
  • metric_revenue - decimal

Примерная схема пути #2 выгладит так:

w8y.png

Какой вариант правильный? Или оба неправильные и есть более оптимальное решение?
  • Вопрос задан
  • 2855 просмотров
Пригласить эксперта
Ответы на вопрос 1
@romanwb
Иногда при использовании полиморфных связей в одной таблице могут быть разные поля, которые используются разными моделями.
Так что, второй вариант с int и decimal вполне логичен.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы