Database design 哪种数据库设计的伸缩性更好?

Database design 哪种数据库设计的伸缩性更好?,database-design,relational-database,scale,Database Design,Relational Database,Scale,哪一个更适合记录投票和订阅问题 A.2个表,订阅和投票各1个表,每个表都有外键连接问题,在这种情况下,我会对每个表进行2个查询的联合查询,以获得该问题的所有活动 或 B.1个表,其中有一个外键可连接到问题,以及一个字段,用于记录该行是否为投票或订阅。在这种情况下,我的其他一些查询也会有一个额外的连接条件。一般来说,join将比单个表上的WHERE子句更昂贵,因此如果您唯一考虑的是扩展一个大数据集,我会选择选项B。也就是说,可能比简单的缩放更重要的是正确的数据设计,除非您能保证投票和订阅基本保持不

哪一个更适合记录投票和订阅问题

A.2个表,订阅和投票各1个表,每个表都有外键连接问题,在这种情况下,我会对每个表进行2个查询的联合查询,以获得该问题的所有活动


B.1个表,其中有一个外键可连接到问题,以及一个字段,用于记录该行是否为投票订阅。在这种情况下,我的其他一些查询也会有一个额外的连接条件。

一般来说,
join
将比单个表上的
WHERE
子句更昂贵,因此如果您唯一考虑的是扩展一个大数据集,我会选择选项B。也就是说,可能比简单的缩放更重要的是正确的数据设计,除非您能保证投票和订阅基本保持不变(这是很少见的),否则最好使用A。例如,如果在某个时候您想在投票中添加一个点值(不仅仅是“是/否”),然后两个表就更合适了。

一般来说,一个
连接
将比一个表上的
WHERE
子句更昂贵,所以如果您唯一考虑的是扩展一个大数据集,我会选择选项B。也就是说,可能比简单扩展更重要的是正确的数据设计,除非你能保证投票和订阅在本质上保持不变(这是很少见的),否则你最好选择A。例如,如果在某个时候你想在投票中添加一个点值(不仅仅是“是/否”),那么两个表格就更合适了。

当你谈到“缩放”时,您必须更精确地确定要扩展哪些操作?*您是否需要优化读、写操作?文件转储?获取外部内容

一旦您知道了要扩展的内容,通常您还需要或想要通过基准测试和分析来确定要扩展到多少,以及您的调整是否有任何好处

这很有趣,取决于上下文。周六晚上进行基准测试是不合适的

我所知道的一些数据库优化技术涉及非规范化和一些在普通环境中看不到的技巧,因此使用这些“黑客”来获得更好的性能有时(通常)会给代码的可维护性带来代价。在我上面提到的非规范化技术中,您会失去数据库提供的一些数据完整性,然后必须在应用程序代码中实现它

对于开发人员来说不是很好,他必须复制数据库的数据完整性,以获得更快的数据库查询时间。鉴于以上所述,朋友,我的拙见是(作为一个懒惰的开发人员),许多缩放问题可以通过忽略缩放问题来避免,直到它们发生

如果您想从一般sql的角度谈论标准的、良好的db构建实践,我只知道两种主要方法,标准化方法和非标准化方法。两者都有子变量,但我想这看起来像你的A和B。两者都是有效的选项,都有优点和缺点,但如果你的应用程序不会被一分钟数千次点击淹没,我会说使用A,可能类似于以下内容:

表投票
-具有主键vid

表格问题
-具有主键

表订阅
-具有主sid、外键vid、qid


祝你好运,快乐

当您谈到“缩放”时,您必须更精确地确定要缩放的操作?*您需要优化读、写操作吗?文件转储?获取外部内容

一旦您知道了要扩展的内容,通常您还需要或想要通过基准测试和分析来确定要扩展到多少,以及您的调整是否有任何好处

这很有趣,取决于上下文。周六晚上进行基准测试是不合适的

我所知道的一些数据库优化技术涉及非规范化和一些在普通环境中看不到的技巧,因此使用这些“黑客”来获得更好的性能有时(通常)会给代码的可维护性带来代价。在我上面提到的非规范化技术中,您会失去数据库提供的一些数据完整性,然后必须在应用程序代码中实现它

对于开发人员来说不是很好,他必须复制数据库的数据完整性,以获得更快的数据库查询时间。鉴于以上所述,朋友,我的拙见是(作为一个懒惰的开发人员),许多缩放问题可以通过忽略缩放问题来避免,直到它们发生

如果您想从一般sql的角度谈论标准的、良好的db构建实践,我只知道两种主要方法,标准化方法和非标准化方法。两者都有子变量,但我想这看起来像你的A和B。两者都是有效的选项,都有优点和缺点,但如果你的应用程序不会被一分钟数千次点击淹没,我会说使用A,可能类似于以下内容:

表投票
-具有主键vid

表格问题
-具有主键

表订阅
-具有主sid、外键vid、qid


祝你好运,快乐

订阅和投票是否具有相同的元数据?他们会一直吗?什么用的天平?阅读?写作?@Jeff Lauder投票表!=订阅表那么您应该使用两个tables@MarcB如何执行读写操作?订阅和投票是否具有相同的元数据?他们会一直吗?什么的天平