拥有2个或更多具有相同列的表是一种好习惯吗?

时间:2017-01-05 18:28:40

标签: postgresql database-design

我正在创建一个网络应用程序,让用户可以搜索餐馆和咖啡馆。由于我目前没有其他类型的数据来区分这两者,我有两个选项来存储餐馆列表。

  1. 在餐馆和咖啡馆使用一张桌子,并有一个enum(文本)栏目,说明参赛作品是餐馆还是咖啡馆。
  2. 创建两个单独的表,一个用于餐馆,另一个用于咖啡馆。
  3. 我永远不需要执行从两者中收集数据的查询,所以对我来说唯一重要的是性能。你会建议什么是PostgreSQL更好的选择?

2 个答案:

答案 0 :(得分:2)

典型的数据库建模适用于单个表。主要原因是可维护性。如果您有两个具有相同列的表,并且您的客户端决定要添加列,请说明操作时间。您现在必须编写两组代码来创建列,读取新列,更新新列等。此外,如果您的客户希望您开始跟踪条,如果您需要第三个表与第三组码。它变得很乱。最好有两个表,一个数据表(比如建立)和大多数列(名称,位置等),然后是第二个表,它是一个"类型"表(比如EstablishmentType),餐馆,咖啡厅,酒吧等都有一排。当然还有连接两者的外键。这样你就可以拥有" X"类型,只需要维护一组代码。

此规则当然有例外,您可能需要单独的表格:

  1. 由于巨大的数据集而导致的性能。 (这取决于你的服务器,但在Postgres中它至少应该说几十万行)。如果这是我建议table inheritance保持适当的可维护性同时加快性能的原因。
  2. 咖啡馆和餐馆在您的网站上有两套完全不同的功能。如果您的整个代码都在说咖啡馆,那么,如果是餐厅,那么这样做,那么您已经有两组代码需要维护,代码中增加了if逻辑的麻烦。如果是这样的话,两个单独的表是一个更清洁和合理的选择。

答案 1 :(得分:0)

最后我选择使用2个单独的表,因为我真的永远不需要同时搜索这两个表,这样我将来可以扩展单个表,如果我需要添加另一个特定的数据字段以咖啡馆为例。