gpt4 book ai didi

mysql - 具有/多种类型的单个对象的关系表设计

转载 作者:行者123 更新时间:2023-11-30 00:12:25 36 4
gpt4 key购买 nike

我正在为 Web 应用程序创建数据库,并正在寻找一些建议来对可能具有多种类型的单个实体进行建模,每种类型具有不同的属性。

作为示例,假设我想为“数据源”对象创建一个关系模型。所有数据源都会有一些共享属性,例如数字标识符、名称和类型。然后,每种类型将根据类型具有不同的属性。为了便于讨论,假设我们有两种类型:“SFTP”和“S3”。

对于 S3 类型,我们可能必须存储存储桶、AWSAccessKeyId、YourSecretAccessKeyID 等。对于 SFTP,我们必须存储地址、用户名、密码,可能还有某种 key 。

我的第一个倾向是将每种类型分解到它们自己的表中,任何非公共(public)字段都在新表中表示,并在主“数据源”表中使用外键。我不喜欢的是,我必须知道哪个表与主表中存储的每种类型相关联,并根据该类型动态重写来自 Web 应用程序的查询。

我在这里缺少简单的解决方案或最佳实践吗?

最佳答案

您所描述的是您想要实现表继承的情况。有三种方法可以做到这一点,所有这些都在 Martin Fowler 的优秀著作 Patterns of Enterprise Application Architecture 中进行了描述。 .

您所描述的第一个倾向称为 Class Table Inheritance由福勒.这是我在数据库设计中倾向于使用的方法,但并不总是适合。此方法最接近于数据库的 OO View ,其中一个表表示抽象类,其他表表示抽象类的具体实现。必须从多个表查询和更新数据。

听起来您真正想要使用的名称是 Single Table Inheritance由福勒.在此方法中,您实际上将所有数据的列放入一个表中,并使用鉴别器列来标识哪些字段与元素类型关联。查询通常更简单,尽管您必须处理鉴别器列。

最后,第三种称为Concrete Table Inheritance由福勒.在我看来,这是最没有用的。在此方法中,您放弃拥有任何类型的分层数据的所有概念,并为每种元素类型创建一个表。不过,有时这可能对您有用。

这三种方法各有利弊。您应该查阅上面的链接,看看哪个最适合您的项目。

关于mysql - 具有/多种类型的单个对象的关系表设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23941571/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com