Я не уверен, каков наилучший способ оформления моего стола. Я использую базу данных SQL Server 2016.
Я должен сохранить для каждого UserId
, Type
и Date
одно значение. Поскольку существует 200 пользователей и 10 типов, в таблице должно храниться много данных с течением времени.
Моя скорость sh должна обеспечивать наилучшую производительность для запроса:
SELECT Value
FROM mytable
WHERE UserId = XXX AND Date = XXX
И сохраните как можно больше табличного хранилища.
Итак, у меня в голове 2 возможных варианта:
Вертикальный
UserId | TypeId | Date | Value
Pro:
- Очень легко выбрать
- Допустимый формат даты
Минусы:
- Очень большой объем данных
- Запрос становится медленным при большом количестве данных. Даже с индексом
Горизонтальный
id
(bigint) состоит из 3 частей.
Например, для UserId = 7, Type = 5
и дата 2020-04-02
, id
будет 2020040200007005
id | UserId | TypeId | Year (int) | Month (Int) | Day1 | Day2 | .... | Day31
Pro:
- Запрос по id быстрый
- Требуется меньше памяти вертикальное использование
Минусы:
- большое количество столбцов
- создание идентификатора с частями может быть опасным, когда количество пользователей увеличивается зарезервированные нули.
Так что я не уверен, какой из них подходит лучше всего.
Может быть, у вас есть идея получше?