Структура базы данных, реляционное или данные данных?
-
22-10-2019 - |
Вопрос
Доброе утро,
У меня есть некоторые проблемы с тем, как должна быть изложена моя база данных, и я бы признателен некоторым руководством. У меня есть несколько таблиц (данные о дождевых осадках), каждая из которых содержит следующие столбцы:
Date (DateTime), Value_of_rainfall (Float)
Каждая из этих таблиц предназначена для определенного места.
Было предложено создать другую таблицу со следующими столбцами:
LocationID (tinyInt), LocationName(char(6))
и вставьте в первую таблицу новую колонку под названием LocationId (TinyInt).
Теперь путаница, которую я имею, касается того, что данные, которые я хранил в данных данных о дождевых данных. Было высказано предположение, что все данные из каждого места содержатся в одной таблице данных. Статистический анализ, который я хочу выполнить информацию, очень (насколько я предполагал до сих пор), специфичный местоположение и не требует запроса нескольких мест одновременно. Данные на пару месяцев для одного места = почти 3 миллиона строк, и я хочу настроить давние расчеты на данные. Поэтому хранилище данных будет более подходящим? Если так, может ли кто -нибудь дать мне несколько указателей на то, как я должен это изложить?
Спасибо за ваше время.
Примечание: я использую SQL Server 2008
Решение
Кажется, вы хотите со временем объединить статистику на основе местоположения для осадков. Структура базы данных, подобная приведенной ниже, позволит вам это сделать. «Источник данных» может быть просто именем файла или некоторым указанием относительно того, откуда он взялся.
create table DimDataSource (
DataSourceID int identity (1,1) not null
DataSourceDesc nvarchar (100) -- May need unicode for file names
)
go
alter table DimDataSource
add constraint PK_DataSource
primary key clustered (DataSourceID)
go
create table DimLocation (
LocationID int identity (1,1) not null
LocationDesc varchar (50)
)
go
alter table DimLocation
add constraint PK_Location
primary key clusterd (LocationID)
go
create table DimDate (
DateID smalldatetime not null -- 'Date' is a reserved word
,MonthID int not null
,MonthDesc varchar (15)
,QuarterID int not null
,QuarterDesc varchar (15)
,YearID
)
go
alter table DimDate
add constraint PK_Date
primary key clustered (DateID)
go
create table DimTime (
TimeID time not null -- 'Time' is a reserved word
,Hour int not null
)
go
alter table DimTime
add constraint PK_Time
primary key clustered (TimeID)
go
-- If the table is <50GB, don't bother with partitioning, but put a clustered
-- index on DateID or LocationID and DateID, depending on how you normally expect
-- to query the data.
create table FactRainfall (
RainfallID int identity (1,1) not null -- May need a wider type if >4B rows.
-- SSAS likes an identity column for
-- incremental loads
,DataSourceID int not null
,LocationID int not null
,DateID smalldatetime not null
,TimeID time not null
,Rainfall float
)
go
-- Add foreign keys as necessary
Заполните размеры соответствующим списком мест, датчиков, времени суток в правильное зерно и одну запись источника данных на файл. Эта таблица также позволит вам положить куб сверху или может быть сглажен с видом, что поможет людям, использующим такие инструменты, как Excel или Stat Packages для получения и использования данных.