Mysql创建了很多表或更少的表,哪个更好?

时间:2013-11-15 15:26:22

标签: mysql sql database

我目前正在研究一种在很大程度上依赖于数据库中的大量数据的webapp。请考虑以下情况。

A)仅使用预定义表格的表格设计

1)table vehicle_type
------------------
id|name
------------------
1 |car
2 |truck
3 |bike
-------------------
2)table users
-------------------
id|name
-------------------
1 |James
2 |John
3 |Stefen
-------------------
3)table ownership
--------------------------------
id|vehicle_type_id|user_id|count
--------------------------------
1 | 1             |1      |30
2 | 1             |3      |20
3 | 3             |2      |13
--------------------------------

B)使用app逻辑动态创建表格的表格设计,即当一个新条目进入vehicle_type时,我们创建一个具有该名称的新表格

1)table vehicle_type
------------------
id|name
------------------
1 |car
2 |truck
3 |bike
-------------------
2)table users
-------------------
id|name
-------------------
1 |James
2 |John
-------------------
3)dynamic_table car
-------------------
id|user_id|count
-------------------
1 |1      |20
2 |2      |10
-------------------
3)dynamic_table truck
-------------------
id|user_id|count
-------------------
1 |3      |15
2 |2      |20
3 |1      |12
-------------------
4)dynamic_table bike
-------------------
id|user_id|count
-------------------
1 |1      |4
2 |2      |12
-------------------

在第二种情况下,vehicle_type作为动态表的关键。首先,我使用所有权来存储每个所有者拥有的车辆类型数量的数据,在第二个我为每种车辆类型创建动态表格并将每个车辆类型计数存储在单独的表格中。我认为这种方法将使与使用单个表所有权相比,数据库相对容易并且查询效率更高。

我从未使用大量数据,但这个数据肯定会有很多数据。 请注意,上表用作不是实际应用逻辑的一部分。

请说明每种方法的优点和缺点。

由于

1 个答案:

答案 0 :(得分:0)

不确定动态表是什么。对于“哪个更好”的问题,没有一个正确的答案。所以这取决于项目。以下是一些可能的意见。

第一种方法(一张表):

优点:

  • 减少开始的代码/时间/精力;
  • 易于维护(可能不是这样);
  • 查询可以遍历整个数据集;
  • 随着数据集的增长,您可以应用table partitioning来处理性能问题;

缺点:

  • 数据集会增长得更快;
  • 不太灵活(例如,特定车辆类型还有一些其他所有权属性);

第二种方法:多个表格

优点:

  • 可能更敏捷;
  • 可能会更好一点;

缺点:

  • 更多代码/时间/精力开始;
  • 难以维持(可能是假的);

作为一般建议:考虑您的数据访问模式。它应该有助于你理解。

  • 您打算使用哪些问题?
  • 他们中的哪一个会被更频繁地执行?
  • 是否会有更多的读写操作?
  • 您要分发的数据是什么?