我建造一张大桌子,出于统计目的,我有很多不同的属性(在某些情况下)有很多不同的值。我想知道建造这样的桌子的最佳方法是什么。
表格将如下(http://sqlfiddle.com/#!2/3d2793):
create table T (
id INT(11) PRIMARY KEY AUTO_INCREMENT,
colA INT(11),
colB VARCHAR(32),
colC VARCHAR(10),
colD VARCHAR(10),
colE INT(2),
colF VARCHAR(10),
colG TINYINT,
colH TINYINT,
colI TINYINT,
colJ INT(4),
UNIQUE(colA,colB,colC,colD,colE,colF,colG,colH,colI)
);
除了最后一列之外的所有列都是此列的可能过滤器(例如"所有行都有colB =' a',colD =' c'和colG! = 1"),并且都具有被用作过滤器的相同概率。这些列的基数从18到2不等。
从A到F的列的值组合具有相同的概率,而列G,H和I与列B的某些值相关并具有以下概率:
col | val | % | col | val | % | col | val | % |
-----|-----|------| -----|-----|------| -----|-----|------|
colG | 0 | 77.0 | colH | 0 | 93.3 | colI | 0 | 99.1 |
-----|-----|------| -----|-----|------| -----|-----|------|
colG | 1 | 5.8 | colH | 1 | 1.5 | colI | 1 | 0.9 |
-----|-----|------| -----|-----|------|
colG | 2 | 7.4 | colH | 2 | 1.6 |
-----|-----|------| -----|-----|------|
colG | 3 | 9.8 | colH | 3 | 3.6 |
我想过水平地建造桌子,但是它的列数太多了,所以我选择了这个垂直方向。设计,但考虑到我发现它可能在某些时候有大约20M +行的基数,目前我们无法以任何方式对表进行分区。所以可能是混合方法(大多数属性的垂直设计,一些值作为列),或者可能使用一些辅助表(我考虑使用表格来组合col,G和H)。
实现这一目标的最佳方法是什么?