Поскольку вы планируете использовать систему управления реляционными базами данных, я бы сохранил эти данные в виде набора нормализованных таблиц. Первый удар (все это основано на SQL Server 2005, и извините,):
CREATE TABLE MyData
(
LineOfBusiness varchar(50) not null
,Year smallint not null
,Element varchar(50) not null
,Value float not null
,constraint PK_MyData
primary key (LineOfBusiness, Year, Element)
)
Наличие двух varchar (50) в первичном ключе может считаться неэффективным, особенно
если вы в конечном итоге с большим количеством данных. (а) я бы не потел, пока вы не наберете 64к, но (б)
к тому времени, когда вы нажмете мегабайты данных, будет слишком поздно возвращаться и пересматривать ваши
архитектура - так может быть и с первого раза.
Может быть эффективно переместить LineOfBusiness в таблицу поиска:
CREATE TABLE LineOfBusiness
(
LineOfBusinessId int not null
constraint PK_LineOfBusiness
primary key
,Description varchar(50) not null
)
Если «элементы» можно повторять между направлениями бизнеса, это определенно более эффективно
чтобы переместить его в таблицу поиска:
CREATE TABLE Element
(
ElementId int not null
constraint PK_Element
primary key
,Description varchar(50) not null
)
Год - это простое числовое значение, которое падает между 1900 и 2100 (а если нет, то да?),
поэтому нет необходимости нормализовать это. Полезна ли справочная таблица для года, зависит от требований приложения. (Может быть, имеет смысл иметь столбцы FirstYear и LastYear в LineOfBusiness?)
Исходя из приведенных выше двух таблиц и работая в реляционной целостности, вы получите
CREATE TABLE MyData
(
LineOfBusinessId int not null
constraint FK_MyData__LineOfBusiness
foreign key references LineOfBusiness (LineOfBusinessId)
,Year smallint not null
,ElementId int not null
constraint FK_MyData__Element
foreign key references Element (ElementId)
,Value float not null
,constraint PK_MyData
primary key (LineOfBusinessId, Year, ElementId)
)
Это оставляет много вопросов открытым относительно того, как загрузить данные и обеспечить / сохранить
допустимость, и, конечно, запросы (и, вероятно, сводные запросы) должны быть
написано, но вы можете вращать колеса и получить никуда, если ваши первоначальные конструкции хранилища
неадекватный.