大数跨境

技术支持:“什么是关系型数据库?”

技术支持:“什么是关系型数据库?” 电商实践
2007-09-10
1
导读:问:我们的网站开发人员告诉我们,我们的电子商务网站使用的是关系型数据库,但我不明白这是什么意思。能否请您解释一下?在几乎所有 Web 应用(包括动态生成的网站)的基础架构中,都依赖于关系型数据库来存储

问:我们的网站开发人员告诉我们,电子商务网站使用的是关系型数据库,但我不明白这是什么意思。你能解释一下吗?

几乎所有Web应用程序(包括动态生成的网站)的基础都是一个关系数据库,它存储并管理应用程序的所有数据。无论您使用的是MySQL、PostgreSQL还是其他众多数据库应用之一,您的数据都会被存储在数据库的各个表中。

在为应用程序创建数据库时,清楚了解您打算如何使用这些数据至关重要,尤其是理解数据表之间的关系。为了解释什么是关系,我将介绍最常用的类型,称为“一对多关系”。

什么是一对多关系

正如名称所示,一对多关系是指一个表中的一条记录与另一个表中的多条记录之间的关系。例如,假设我们有一个购物应用程序,允许我们将产品分配到特定类别。在这种情况下,我们的数据库将有一个表用于保存类别的数据,可能包含以下字段:

  • id(主键)
  • name(类别名称)
  • description(类别描述)

每个产品将被分配到一个类别中,这实际上意味着“一个类别包含多个产品”。为了实现这一点,我们需要一种方法告诉数据库程序每个产品属于哪个类别。让我们看看存储我们产品信息的另一个表:

  • id(主键)
  • name(产品名称)
  • price(价格)
  • description(描述)
  • category_id(外键)

正如你所见,我们有一个字段用于产品名称、价格、描述,以及另一个用于产品表主键的“id”字段。然而,与类别表不同,我们的产品表还有一个额外的字段称为“category_id”,它保存所分配产品所属类别的主键值。这被称为“外键”,它允许数据库应用程序将我们的两个表关联起来。

为了说明这一点,我们现在可以通过要求数据库从产品表中检索所有在“category_id”字段中具有值“1”的记录,来找到所有属于“Widgets”类别的产品。这样,我们在数据库中的类别和产品之间建立了一对多的关系。

添加约束以维护数据完整性

除了创建这种关系之外,我们还可以向其添加约束。由于这是一对多的关系,假设是每个类别将拥有零个或多个分配给它的产品。但是,如果你删除一个类别会发生什么?如果没有事先规划,数据库只会从我们的类别表中删除该记录。但这显然会造成问题,因为我们可能会遇到产品被分配到一个不存在的类别的情况。

一种解决方案是手动删除所有分配给我们想要删除的类别的产品。更好的方法是让数据库应用程序来处理这个问题。通过在产品表上添加约束,我们可以告诉数据库应用程序在我们删除类别时应该做什么:

ALTER TABLE products ADD CONSTRAINT fk_product_categories FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE CASCADE;

这看起来有点令人生畏,而把它说出来会有所帮助。我们正在告诉 MySQL(或您使用的任何数据库)向 products 表添加一个名为“fk_product_categories”的约束。这个名称是我随意起的,但最好给它起一个有用的名字,以便您能记住它是什么。

接下来,我们告诉数据库,products 表中名为“category_id”的外键引用了 categories 表中名为“id”的主键字段,从而实质上强制了我们定义的这种关系。最后,我们告诉数据库级联删除请求,这意味着当发出删除 categories 表中记录的请求时,数据库还应遍历并删除 products 表中所有分配给该类别的记录。数据库利用一对多关系以及 products 表中的外键字段来实现这一点。

总结

虽然这只是一个关于某种关系的快速概述,但理解数据库中关系的工作原理非常重要。此外,尽管我没有在这篇文章中详细介绍,了解数据库中约束和索引的工作原理也很重要,以确保你的下一个Web应用程序能够良好运行并具有可扩展性。保持数据库整洁可以消除开发周期中许多麻烦的障碍,其中许多障碍克服起来可能代价高昂。

【声明】内容源于网络
0
0
电商实践
电商实践
内容 8053
粉丝 0
电商实践 电商实践
总阅读37.4k
粉丝0
内容8.1k