在SQL Server中创建数据库:同结构表关系设置问题
处理同结构多年份CiteScore表的数据库关系方案
针对你现有10张同结构、仅年份不同的CiteScore表,要建关系并支持表格/多维模型,最优方案是先重构表结构,再建立标准的维度-事实关系,具体步骤如下:
1. 优先合并多年份数据为单表
把10张年份表合并成一张包含年份维度的主表,这是后续建模的基础:
- 新增
年份字段:给每张表的数据加上对应年份的标记,比如2014年的表所有数据加Year=2014,以此类推。 - SQL拼接示例(以SQL Server为例):
SELECT *, 2014 AS Year INTO CiteScoreAll FROM CiteScore2014 UNION ALL SELECT *, 2015 AS Year FROM CiteScore2015 UNION ALL SELECT *, 2016 AS Year FROM CiteScore2016 -- 依次添加剩下7张表的SELECT语句
- 合并后生成的
CiteScoreAll表,包含所有年份的数据,后续操作更高效。
2. 拆分维度表与事实表(适配多维模型)
如果要构建OLAP类的多维模型,建议拆分结构:
- 维度表(Journals):抽取出不随年份变化的字段,比如期刊ID、期刊名称、学科分类、出版商等,设置
期刊ID为主键(用你已有的ID即可)。 - 事实表(CiteScoreAll):保留
期刊ID(关联维度表)、年份、CiteScore值、引用数、发文量等度量类字段,给事实表设置复合主键(期刊ID+年份),确保每条数据唯一。 - 建立关系:用维度表的
期刊ID和事实表的期刊ID建立一对多关系(一个期刊对应多年的CiteScore数据);如果需要更精细的时间分析,还可以单独建Years维度表(存年份、年度区间等),用Year字段和事实表关联。
3. 若保留原10张表的关联方式(不推荐)
如果一定要保留每张年份表的独立结构,可通过公共维度表关联:
- 建立
Journals维度表(同上),每张年份表的ID字段都和Journals的主键建立一对多关系。 - 这种方式适合临时查询,但在多维建模时会增加复杂度,不建议作为长期方案。
4. 适配表格模型(如Power BI/Excel数据模型)
- 用合并后的
CiteScoreAll表,或拆分后的维度-事实表,在模型工具中直接设置关系:Journals[ID]→CiteScoreAll[ID],Years[Year]→CiteScoreAll[Year]。 - 设置好关系后,就能直接进行年份切片、期刊筛选、多维度聚合分析,完美适配表格模型的需求。
内容的提问来源于stack exchange,提问作者millennium_002
相关产品推荐
相关产品推荐

