为每个表/集合具有相同表/集合的多个实例的网站设计数据库的正确方法是啥?

Posted

技术标签:

【中文标题】为每个表/集合具有相同表/集合的多个实例的网站设计数据库的正确方法是啥?【英文标题】:What is the proper way to design a database for a website that has multiple instances of the same table/collection for each table/collection?为每个表/集合具有相同表/集合的多个实例的网站设计数据库的正确方法是什么? 【发布时间】:2021-12-27 15:40:55 【问题描述】:

所以我有一个网站,分为 5 种不同的模式/部分/模块/隔间/等...

用户可以通过单击图标/链接来切换到每个单独的模式。

每种模式基本上都是网站的不同实例。换句话说,它们都有相同的 UI 组件和后端表/集合。

模式中的数据将永远不必与其他模式的表进行通信。换句话说,不同模式的表之间没有连接。

假设所有模式都需要有一个名为TABLE_A 的表。

设计方案一:

5 种模式中的每一种都有自己的TABLE_A 版本:

MODE_1_TABLE_A MODE_1_TABLE_A MODE_2_TABLE_A MODE_3_TABLE_A MODE_4_TABLE_A MODE_5_TABLE_A

设计方案2:

只有一个TABLE_A有一个额外的列来记录记录属于哪种模式

TABLE_A Column_ID, ..., Column_Mode

就查询速度等而言,哪种设计是正确的设计?

我选择不使用 noSQL 数据库,即 MongoDB。

每种模式都会有一个页面显示来自TABLE_A的项目列表。

【问题讨论】:

每种模式都有重复的列吗?如果您有很多重复项,您可以将所有内容放在一个表中并使用数字来引用另一个表?另外,我想一张桌子会使维护更容易吗?不过我不得不承认,我从来没有遇到过需要做出这样的选择的情况,所以除了应该标准化之外,我完全不知道什么对你最有利。 【参考方案1】:

我认为这两个选项都不会对查询性能产生重大影响。真正的问题更多在于灵活性和可支持性。

显然维护一个表比维护同一个表的 5 个相同副本更容易。

如果 5 种模式从一个单一的通用模型中分离出来,那么将所有 5 种模式的数据放在一个表中将变得越来越难以支持,并且在未来的某个时候将它们分成 5 个单独的表是不太可能的简单点。

可支持性或灵活性是否对您更重要/更相关,由您决定

【讨论】:

你也可以看看这个问题吗? ***.com/questions/69997802/… 在里面我基本上会问为什么拥有更多的桌子不会更快?

以上是关于为每个表/集合具有相同表/集合的多个实例的网站设计数据库的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

初识java集合——散列表(HashTable)

ColdFusion:具有多个外键的 ORM 集合

数据结构:线性表

可变数组(PLSQL)

从集合视图的数据源方法中找出表视图的部分

SQL记录-PLSQL集合