首页 > 解决方案 > SQL 许多具有相同列的表 - 导出到单独的表并在每个查询中加入?

问题描述

我正在设计一个相当大的应用程序,通常可能有大约 50-100 个表。

我发现几乎每个表都可以使用“已删除”、“时间戳”、“用户 ID”、“工作区”列。

现在摆脱所有这些列并简单地创建 3 个表,这些表的名称链接到所有其他 50-100 个表的 row_id 和 table_id 不是更好的做法吗?然后在每个查询中我只是加入这些表?

这肯定是数据库设计中很常见的一个问题,但是我没有通过谷歌和其他资源找到任何东西。

常见的方法是什么?当然,将逻辑导出到外部表似乎更像是一种规范化的方法,但是如果每个查询都有这么多的 JOINS,性能可能会受到影响(由于现有的数据结构非常复杂,因此已经有大量的连接等。 )。

标签: sqlpostgresqljoindata-structuresdatabase-design

解决方案


这实际上取决于您打算如何处理数据。

您是否计划仅使用这些列中的数据(已删除标志、所有时间戳标志等)进行大量查询,而不查看给定行中包含的其他数据?

如果您将要执行的大多数查询都不想加入,那么这是存储数据的更好方法,并且可以制作索引来为您提供更多的外部数据价值。

但是,如果大多数时候您在使用表格行中的数据的同时需要这些数据,那么它应该是表格的一部分。

例如,在连接表中包含已删除标志对我来说没有意义——您希望能够过滤列以了解是否应将某些内容视为已删除。

另一方面,审计信息(创建日期、修改日期、删除日期、删除者、上次访问等)似乎都是可以存储在另一个表中的数据类型。通常,您只想查看审计信息本身,而不关心具体的行。


推荐阅读