Я работаю над SQL SERVER 2012 Express Edition , (я не архитектор баз данных, а только c # dev) У меня была таблица, в которой было 30 столбцов и более 10 миллионов строк
CID PID DID FID DateTimeStamp P01 P02 P03.....P30
CI1001 PI1001 DI1001 30 2017-04-02 9:14 12 230 230
CI1001 PI1001 DI1002 51 2017-04-02 9:14 34 3430 3430
CI1001 PI1001 DI1003 5 2017-04-02 9:14 56 340 340
CI1001 PI1001 DI1004 4 2017-04-02 9:14 78 340 340
CI1001 PI1001 DI1005 5 2017-04-02 9:14 33 340 340
Проблема, с которой я сталкиваюсь в данной схеме:
Я не могу добиться динамического добавления столбцов в этой структуре.Например, когда-нибудь в нескольких местах моего клиента мне нужно добавить дополнительные столбцы рядом с «P01, P02 ... P30», такие как P31, P32.
Нет необходимости, чтобы все столбцы, например, P01, P02 ... P30, имели значения все время, возможно, будут значения для P01, P02 ... P020 и остальныхбудет пустым / нулевым.Таким образом, выделенное пространство там теряется.
В текущей схеме мне нужно применить 2, 3 индекса для поддержания производительности моих запросов и процедур.Он работает нормально, но, к сожалению, сам по себе индекс использует 30% памяти, и с момента его экспресс-выпуска он создает проблему ограничения размера файла для меня через несколько месяцев.
Теперь я собираюсь разбить схему таблицы выше в две таблицы, такие как
Таблица будет содержать уникальный код для каждого столбца, например (P01, P02, P03)
CID PID PCODE PNAME
CI1001 PI1001 C1 P01
CI1001 PI1001 C2 P02
CI1001 PI1001 C3 P03
CI1001 PI1001 C4 P04
CI1001 PI1001 C5 P05
Это будет фактическая таблица транзакций, где для каждого столбца я вставлю одну новую строку.
CID PID DID FID PCODE DateTimeStamp Value
CI1001 PI1001 DI1001 30 C1 2017-04-02 9:14 230
CI1001 PI1001 DI1002 51 C2 2017-04-02 9:14 3430
CI1001 PI1001 DI1003 3 C3 2017-04-02 9:14 340
CI1001 PI1001 DI1004 4 C3 2017-04-02 9:14 340
CI1001 PI1001 DI1005 5 C5 2017-04-02 9:14 340
С этой схемой я уверен, что это позволит добавить любое нет.Колонок во время выполнения, но я не уверен, получу ли я прирост производительности и размера с этим.Кто-нибудь может предложить, если этот подход является правильным или какие-либо входные данные о том, как разработать такую схему?
Отредактировано
С этой схемой 3 из моих проблем, которые я объяснил выше, были исправлены, и я сделал несколько пробных запусков по этому и только с индексом весь мой набор запросовработать бесперебойно, поэтому производительность - это не проблема, а пространство, поскольку оно потребляет буквально в 7 раз больше, чем предыдущий.
Ниже приведена схема из двух таблиц
ОСНОВНАЯ ТАБЛИЦА СДЕЛОК: -
ClientID varchar(8)
PlantID varchar(8)
DeviceID varchar(8)
FeederID tinyint
PCODE varchar(10)
Dates date
TimeStamp time(7)
VALUE decimal(19, 3)
TABALE с УНИКАЛЬНЫМ КОДОМ ДЛЯ КАЖДОГО COL
ClientID varchar(8)
PlantID varchar(8)
PCODE varchar(10)
PARANAME varchar(15)
Так что я думаю изменить схему таблицы, Может кто-нибудь, пожалуйста, предложите какие-либо входные данные о том, какразработать такую схему?