Mysql 数据库模型:名称/值对
我将要写一个应用程序,它应该可以注册信息。该应用程序应该能够在许多不同的领域使用,其中一些值应该是可搜索的,而另一些则不是,因此我提出了以下数据库模型:Mysql 数据库模型:名称/值对,mysql,sql,database-design,Mysql,Sql,Database Design,我将要写一个应用程序,它应该可以注册信息。该应用程序应该能够在许多不同的领域使用,其中一些值应该是可搜索的,而另一些则不是,因此我提出了以下数据库模型: ---------- | Node | ---------- | --------------- | | --------- --------- | At
----------
| Node |
----------
|
---------------
| |
--------- ---------
| Attr | | IAttr |
--------- ---------
Attr Table是一个至少有两列名称和值的表。
IAttr表具有相同的设置,不同之处在于值列上有索引
有些事情告诉我,这不是一个很好的办法来做这件事,但我不能说为什么。我想得到评论,如果这是坏的,为什么。我想使用的数据库是Oracle/MySQL或类似的数据库
谢谢以这种方式在表之间拆分数据在本例中称为水平和 您当然可以自己对数据进行分区并在应用程序中对其进行管理,也可以使用分区功能让MySQL为您处理 如果使用MySQL的分区,即使在未搜索的值上仍然会有索引,也可以将搜索到的数据保留在自己的分区中,以使该索引保持最小大小,从而提高搜索性能 推出您自己的分区可以避免在未搜索表上增加索引,这将提高对所述表的写入性能并减少内存占用,当然,这是以代码的复杂性为代价的 我建议你避免预先优化,尽量让事情尽可能简单。如果确实需要,只需以优化的形式增加复杂性,这通常需要大量测试或实际使用来确定成本和价值
要么使用MySQL的分区,要么根本不使用分区,然后再使用分区。为什么有两个表?一个是用户基于名称进行搜索,另一个是用户基于值进行搜索?为什么不在Attr表本身中添加一个关于值的索引?如果属性的数量增加很多,会发生什么。我的想法是,通过拆分它们,索引不会增长得太大。在同一个表上仍然可以有两个单独的索引。根据要搜索的列,将使用适当的索引。如果属性数量增长过多,则将相同的数据插入两个不同的表中,这将影响性能。感谢您提供的详细答案。我完全同意你的观点,一开始就保持简单,在需要的时候构建东西。我只是想检查一下,我没有走错方向。我见过其他标准系统的实现,它们做的东西有点不同,但它们有好几年的历史。