gpt4 book ai didi

sql - 创建 SQL 模式 (postgresql)

转载 作者:行者123 更新时间:2023-11-29 14:12:45 24 4
gpt4 key购买 nike

我在为 PostgreSQL 项目创建模式时遇到问题。

这是一个社交网站,如果有一个配置文件,每个配置文件有三种类型:通用、教育和就业配置文件,因此每个配置文件需要不同的属性……我们如何在一个表中完成所有这些?

create type ProfileTypeValue as enum
('generic', 'education', 'employment');

create Profiles (
id integer
type ProfileTypeValue
....?
primary key (id)
);

因为例如,如果它是一个教育背景,那么我们需要有机构名称等,或者如果它是一个就业背景,那么我们需要有一个雇主名称属性等。

是否最好只有 3 个不同的表,每个配置文件类型 1 个,不知道这是否可能......但我觉得我需要一个 if 语句来说明它是否是配置文件,包括这些属性,或者它是否是一个配置文件, 包括这些属性等。

最佳答案

这里有几个选项

  1. 都在同一个表中
  2. 一个表中的通用配置文件属性,各自表中特定的配置文件类型,以及对通用配置文件表的外键引用
  3. 继承
  4. 键值存储

同一张表

在此选项中,无论配置文件是什么类型,所有字段始终存在。第一次这样做太容易了,因为您只需要列出所有列。然而,这确实是一个糟糕的设计,从长远来看会让你的生活更加艰难,因为可维护性和可扩展性很差。您应该阅读数据库范式等。不要这样做。

在自己的表上掌握profile表和profile类型依赖的详细信息

在此选项中,您将为所有配置文件创建一个表。这将包括所有公共(public)属性。该表将确保标识符都在同一个命名空间中,并且每个配置文件都有一个唯一的 ID。对于每个配置文件类型,您将创建一个新表,该表具有对主配置文件表的外键引用。然后,您可以在就业概况表和主概况表上使用内部联接来选择所有就业概况。此设计允许您为每个配置文件类型创建约束。此外,这种设计让您拥有既是就业又是教育概况的概况。你应该这样做。

继承

Postges 提供了表继承的工具。您可以通过为所有配置文件类型创建一个基表然后为每个配置文件类型创建子表来使用它。然后每个配置文件类型继承父表中定义的所有属性。通过继承,您可以使用父表选择所有配置文件,并使用就业配置文件表选择所有就业配置文件。如果通用配置文件仅使用公共(public)属性,则可以将它们存储到父表中。

postgres 中继承的主要缺点是父表和子表不共享同一个命名空间。您不能创建跨越所有表的唯一约束。这意味着您必须以其他方式确保标识符是全局唯一的,例如为配置文件标识符保留一个单独的表。

您应该考虑在您的情况下继承的缺点是否重要。但是,如果您使用 postgres,这是为所有配置文件类型创建单独表格的明智方法,因为您不必复制公共(public)属性的定义。

键值存储

您还可以为公共(public)配置文件属性创建一个表,并将其余属性保存在(配置文件、属性、值)元组中。通过这样做,您将放弃 RDBMS 的好处,并且您必须在您的程序中实现所有逻辑。不要这样做。

关于sql - 创建 SQL 模式 (postgresql),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5447551/

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