数据库模型:名称/值对

时间:2014-04-30 16:08:48

标签: mysql sql database-design

我即将编写一个可以注册信息的应用程序。应用程序应该能够在许多不同的领域中使用,某些值应该是可搜索的,而有些则不是,因此我提出了以下数据库模型:

           ----------
           |  Node  |
           ----------
                |
         ---------------
         |             |
     ---------     ---------
     |  Attr |     | IAttr |
     ---------     ---------

Attr Table是一个包含至少两列Name和Value的表 IAttr Table具有相同的设置,不同之处在于Value列上有索引。

有些东西告诉我,这不是一个很好的方法来做到这一点,但我不能说为什么。我想评论一下这是不好的,为什么呢。我想使用的数据库是Oracle / MySQL或类似的。

由于

1 个答案:

答案 0 :(得分:0)

以这种方式在表之间拆分数据称为partitioning(在这种情况下为水平)和MySQL supports horizontal partitioning

您当然可以自己对数据进行分区并在应用程序中对其进行管理,或者您可以使用分区功能让MySQL为您处理。

如果使用MySQL的分区,即使非搜索值仍然存在索引,您可以将搜索到的数据保留在自己的分区中,以使该索引保持最小值,从而提高搜索性能。

推出自己的分区可以避免非搜索表上的附加索引,这样可以提高所述表的写入性能,同时减少内存占用,当然,代价是代码的复杂性。

我建议您避免预优化,尽量让事情尽可能简单。如果你真的需要,只能以优化的形式增加复杂性,而且通常需要大量的测试或实际使用才能确定成本和价值。

首先使用MySQL的分区,或者根本不使用MySQL分区,然后从那里开始。