6

我正在使用符合 GEDCOM 的家谱的社交网站。我们需要决定是否应该为用户配置文件使用水平或垂直数据库结构。所以,我想知道是否有人可以回答何时使用水平数据库结构以及何时使用垂直数据库结构。

我找到了一些未确定字段的购物网站的答案:应该使用垂直数据库结构。但我对家谱网站使用什么感到困惑。我应该使用垂直还是水平?

4

3 回答 3

8

我假设您使用 Mysql、Ms sql、Sqlite、Postgresql 或 Oracle 等关系数据库进行存储?

Gedcom 是信息交换的标准,因此您知道您将拥有多少列。也许将来该标准会扩展新属性,但可能不会有很多新属性。您可以轻松地使用一些新列扩展表。

我会使用“水平”表而不是实体属性值系统(垂直表)。垂直表系统往往很慢。它们不能被正确索引并混淆查询优化器。

当您的用户可以在他们的配置文件中定义新属性(例如 eye colo(u)r 或最喜欢的 colo(u)r 自己)时,情况就不同了。您希望这些配置文件有多灵活?

于 2009-12-02T05:21:32.617 回答
3

垂直数据库非常适合去仓库和只读/只读报告。通常你会在一夜之间重新生成它们。它们的写入性能通常很差,但是 SELECT 的速度要快 10-100 倍。

使用垂直数据库的典型场景是 olap 报告,您可以创建(每日)数据快照,然后对其运行查询。大部分好处来自仅请求相对少量字段的查询,例如,当您从宽大的表中仅选择少数字段时。这种针对数百万条记录的查询(例如计算 SUM/COUNT/AVG)只需要一两秒。

您的案例似乎不适合垂直数据库。

于 2012-01-12T20:38:24.447 回答
0

我同意 tuinstoel,垂直表/EAV 系统不仅速度慢,而且有时非常复杂。有时需要编写一些自己的 api 方法来处理这些表,而开发人员只处理这些方法以避免复杂性。

因此,如果您不需要添加更多字段,请使用水平表。但是,如果您还要支持多语言功能,您可能需要使用不同的表。但我建议仍然坚持使用水平表。

我还在开发一个涉及用户配置文件的站点,并且我正在使用水平表,如果将来需要不同的语言支持,那么我将只修改语言很重要的字段。

于 2011-11-06T03:08:00.657 回答