【发布时间】:2018-05-12 04:07:03
【问题描述】:
我正在研究 SSMS 2012。
我创建了一个 Facttable 及其维度,两者都与 ParentID 关系。我创建了以更用户友好的方式显示 Facttable 和维度的视图(简单地取消透视)。当我使用 LEFT OUTER JOIN 从这些视图中获取信息时,一切都完美无缺。
事情是在我的某些维度上,我与我的 Facttable 有 n 对 1 的关系。例如,我在我的 Facttable 中存储了有关一家公司的一般信息,并在维度中存储了其股票的每日价值。
“问题”是当我对视图进行 LEFT OUTER JOIN 时,我在表的左侧部分有很多冗余信息(对应于公司的一般信息)。
给你一个想法:
NAME CITY DATE STOCK_PRICE
Alpha Tokyo 05/01/2017 2.2
Alpha Tokyo 04/01/2017 2.3
Alpha Tokyo 03/01/2017 2.1
Alpha Tokyo 02/01/2017 2.0
Alpha Tokyo 01/01/2017 2.4
我知道 NULL 的处理方式比“实际”值更有效。 我们的想法是实现类似的目标。
NAME CITY DATE STOCK_PRICE
Alpha Tokyo 05/01/2017 2.2
NULL NULL 04/01/2017 2.3
NULL NULL 03/01/2017 2.1
NULL NULL 02/01/2017 2.0
NULL NULL 01/01/2017 2.4
在最好的情况下,这个想法对于来自 Facttable 和不同维度的多个“冗余”信息是可行的(如果同一家公司每天存在不同的价格,相同的日期只会出现一次,然后将为 NULL)
这是我的想法,但请随时就此事发表您的意见。核心是真的要避免我的大的 1 对 n 关系,让我的电脑很难。
【问题讨论】:
-
真的,您似乎要问的是“我怎样才能从我的公司表中只获取最新的行” - 这个问题已经被问过很多次了(大约 73,000 似乎).. 谷歌对于
site:stackoverflow.com most recent row -
编辑您的问题并显示您正在使用的查询以及您想要的结果。
-
有点难以理解您的实际要求。您似乎担心字符串会一遍又一遍地重复,这可能会导致计算机上的可用内存出现问题。但无论如何,您不会选择所有拥有所有数据的公司。所以我们不是在谈论数十亿行,而是可能有数百或数千行。这当然没有问题。所以我会说消除你的担忧:-)
-
请举一个更具体的例子。听起来您对事实表或维度表中的任何一个(或两者)的设计都有问题。由于无法看到所涉及的结构,我们无法判断。您还可以从阅读有关最小完整可验证示例中受益。 stackoverflow.com/help/mcve
-
这个,
For example, I've stored general information about a company in my Facttable and the daily value of its stock in the dimension,听起来倒退了。
标签: sql sql-server left-join dimensions fact-table