【发布时间】:2019-09-18 00:18:43
【问题描述】:
我从学校毕业就没有接触过数据库,所以如果我的问题太入门,请见谅。
当我记得如何使用 UML 绘制 ERD 时,最近,我的老板让我为带有前端的库存系统创建一个数据库。我搜索了一些类似的系统,发现在后端他们的数据库在表之间没有任何关系(我做了 DB reversed UML)。
所以我想了想,即使没有关系(没有外键),应用程序似乎也能正常工作,那么我们还有什么理由需要表之间的关系呢?
【问题讨论】:
-
外键将强制表之间的参照完整性。通常也意味着创建了一个索引,但如果您愿意,您可以通过其他方式做到这一点。但第 1 点是关键。
-
大约 8 年前我有过完全相同的经历。这在数据仓库领域很常见。好问题。
-
@Z4-tier 这是在数据仓库中完成的,因为通过引入冗余可能会加快查询某些 KPI 的速度。由于仓库中的数据通常来自关系系统(它是一种副本),因此不稳定的风险非常低。
-
@RuudHermans 非常正确,但请记住有两种非规范化:好的和坏的。好的类型是有意创造的,有一个特定的目标(通常是性能)。坏的类型是无意的,当相同的数据从 2 个独立的上游系统登陆时可能会发生。如果这些重复的数据从未得到协调或以其他方式处理,那就是个问题。如果重复数据不一致(例如来自用于管理计划的系统的财务数据,与来自用于准备 SEC 文件的系统的会计数据),情况会更糟。
标签: database sql-server-data-tools erd