【问题标题】:Create a table with a column that has 2 concatenated values from different columns?创建一个包含来自不同列的 2 个连接值的列的表?
【发布时间】:2020-10-15 12:51:31
【问题描述】:

如何创建一个表,其中一列的值是同一个表中多个列的两个值的串联?

例如 - 表“users”具有以下列 -
idnamelast_name

如何在 Postgresql 中创建此表,以便每次插入新行时,“id”列的值是通过连接“name”和“last_name”列值?

在列上声明DEFAULT值时有这样的功能吗?

最终目标是使用 SqlAlchemy ORM 创建此表(当值将在 SQL 服务器中生成而不是在 sqlalchemy 框架中逻辑生成时)。

【问题讨论】:

  • ""id" 列的值是通过连接"name" 和"last_name" 列值生成的" - 这是一个非常糟糕的主意。 “ID”列应该是主键(或至少是唯一键)。如果您只是连接名称和姓氏,这将永远不会起作用。只需将主键定义为identity
  • @a_horse_with_no_name 是的,没关系..这只是一个例子

标签: sql postgresql sqlalchemy


【解决方案1】:

Postgres 现在支持生成列,因此您可以添加这样的列:

alter table users add full_name varchar(255) 
    generated always as (name || ' ' || last_name);

请注意,我不是将其添加为 id,而是添加为新列。 id 应该是一个数字,以便它可以有效地用于索引和外键引用。

此外,您应该切勿将 PII 放入主键中。这只会在整个数据库中扩散隐私问题。

【讨论】:

  • 什么是 PII?将 id 作为字符串还有什么问题?您仍然可以在字符串列上创建索引,不是吗?
  • @Drxxd 。 . . PII = 个人身份信息。如今,它已成为许多司法管辖区许多法律的主题。
猜你喜欢
  • 1970-01-01
  • 2020-04-18
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多