你会如何实现一个非常广泛的"表"?

Mar*_*las 12 sql database sql-server

假设您正在为具有许多属性(2400+)的实体建模,远远大于给定数据库引擎的物理限制(例如~1000 SQL Server).除了域/候选键之外,对这些数据点的相对重要性(哪些是最常用的/最常用的)一无所知,您将如何实现它?

A)EAV.(嘘...本机关系工具抛出窗外.)

B)直接穿过.第一个表有一个主键和1000列,直到极限.下表是1000,外键是第一个.最后一张表是剩余的400,也是外键.

C)在ceil( n / limit )表格上均匀条纹.每个表都有偶数列,外键键到第一个表.800,800,800.

D)别的......

为什么?

编辑:这更像是一个哲学/通用问题,与任何特定限制或引擎无关.

编辑^ 2:正如许多人所指出的那样,数据可能没有规范化.按照惯例,当时的业务限制使深入研究成为不可能.

Rem*_*anu 6

使用稀疏列最多30000列.与EAV或XML相比的最大优势是,您可以将过滤索引与稀疏列结合使用,以便对常见属性进行非常有效的搜索.


小智 6

我的解决方案:进一步调查 具体来说,确定表是否真正正常化(在2400列这似乎不太可能).

如果没有,重组直到它完全标准化(此时每个表可能少于1000列).

如果已经完全标准化,则建立(尽可能)每个属性的近似人口频率.将最常出现的属性放在实体的"主"表中,对于不常用的属性使用2或3个附加表.(尝试使出现频率成为确定哪些字段应该放在哪些表上的标准.)

只考虑EAV用于极其稀疏的属性(最好不要).