星型模型中的设计数据库

时间:2017-11-14 11:32:04

标签: sql sql-server data-warehouse star-schema

我的数据库中有以下表格(这只是一个部分)。

  1. C_location表 - 保存有关位置的信息(约500行)
  2. C_ProjectStatus表 - 保存有关ProjectStatus(约5行)的信息
  3. 项目表 - 保存有关项目的信息(约1百万行)
  4. ProjectLocation - 项目实施的位置列表(大约10mln行,每个项目大约有10个位置)
  5. ProjectLocationParticipant - 保存每个位置的参与者信息(每个位置大约有5个参与者,大约50万行)。
  6. 一般情况下,这不是整个数据库,我还有其他的#1;一对多" Project,ProjectLocaion等的关系。例如,每个项目都有许多实现者(ProjectImplementers表与FK项目)和ProjectImplementer可以有自己的"一对多"与FK到ProjectImplementer表的关系表。所以我有3种表格

    1. 主要实体或根 - 项目表
    2. 查找表 - C_ProjectStatus和C_Location
    3. 子实体表 - 项目表的所有子表,如ProjectLocation,ProjectLocationParticipant等。
    4. 这是我的数据库结构。

      CREATE TABLE C_Location (
      LocationID INT PRIMARY KEY CLUSTERED IDENTITY, 
      Name NVARCHAR(50)
      )
      GO
      CREATE TABLE C_ProjectStatus (
      ProjectStatusID INT IDENTITY PRIMARY KEY, 
      Name NVARCHAR(50)
      )
      CREATE TABLE Project (
      ProjectID INT IDENTITY PRIMARY KEY, 
      Title NVARCHAR(50), 
      StartDate DATETIME, 
      ProjectStatusID INT FOREIGN KEY REFERENCES dbo.C_ProjectStatus(ProjectStatusID)
      )
      GO
      CREATE TABLE ProjectLocation (
      PojectLocationID INT IDENTITY PRIMARY KEY, 
      ProjectID INT FOREIGN KEY REFERENCES dbo.Project(ProjectID),
      LocationID INT FOREIGN KEY REFERENCES dbo.C_Location(LocationID)
      )
      GO 
      CREATE TABLE PorjectLocationParticipant (
      ProjectLocationParticipantID INT PRIMARY KEY IDENTITY, 
      ProjectLocationID INT FOREIGN KEY REFERENCES dbo.ProjectLocation(PojectLocationID), 
      ParticipantFirstName NVARCHAR(50), 
      ParticipantLastName NVARCHAR(50) 
      )
      

      我是数据仓库中的新手,所以我需要帮助才能将此结构转换为星型模式。

1 个答案:

答案 0 :(得分:0)

创建一个包含所有度量的表 - 称为事实表。在您的情况下,将现有表的所有主键都放入一个表中并与它们建立外键关系。现有表格将是您的尺寸。如果projectlocation和project表形成一个父子关系并且它的标准通过out,通过将表保留为现在添加的fact表创建一个雪花模式。如果您只查找星型模式,请将项目和项目位置表合并到一个表中(这将成为一个维度),同样适用于所有表。这样,每个维度仅保存与数据仓库的一个实体相关的数据。