Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 数据库模型:名称/值对_Mysql_Sql_Database Design - Fatal编程技术网

Mysql 数据库模型:名称/值对

Mysql 数据库模型:名称/值对,mysql,sql,database-design,Mysql,Sql,Database Design,我将要写一个应用程序,它应该可以注册信息。该应用程序应该能够在许多不同的领域使用,其中一些值应该是可搜索的,而另一些则不是,因此我提出了以下数据库模型: ---------- | Node | ---------- | --------------- | | --------- --------- | At

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

           ----------
           |  Node  |
           ----------
                |
         ---------------
         |             |
     ---------     ---------
     |  Attr |     | IAttr |
     ---------     ---------
Attr Table是一个至少有两列名称和值的表。 IAttr表具有相同的设置,不同之处在于值列上有索引

有些事情告诉我,这不是一个很好的办法来做这件事,但我不能说为什么。我想得到评论,如果这是坏的,为什么。我想使用的数据库是Oracle/MySQL或类似的数据库


谢谢

以这种方式在表之间拆分数据在本例中称为水平和

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

如果使用MySQL的分区,即使在未搜索的值上仍然会有索引,也可以将搜索到的数据保留在自己的分区中,以使该索引保持最小大小,从而提高搜索性能

推出您自己的分区可以避免在未搜索表上增加索引,这将提高对所述表的写入性能并减少内存占用,当然,这是以代码的复杂性为代价的

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


要么使用MySQL的分区,要么根本不使用分区,然后再使用分区。

为什么有两个表?一个是用户基于名称进行搜索,另一个是用户基于值进行搜索?为什么不在Attr表本身中添加一个关于值的索引?如果属性的数量增加很多,会发生什么。我的想法是,通过拆分它们,索引不会增长得太大。在同一个表上仍然可以有两个单独的索引。根据要搜索的列,将使用适当的索引。如果属性数量增长过多,则将相同的数据插入两个不同的表中,这将影响性能。感谢您提供的详细答案。我完全同意你的观点,一开始就保持简单,在需要的时候构建东西。我只是想检查一下,我没有走错方向。我见过其他标准系统的实现,它们做的东西有点不同,但它们有好几年的历史。