gpt4 book ai didi

sql - 重构字段的外键

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

在 PostgreSQL 中,我需要重构一个表 (Purchases);它有一个指向另一个表(Shop)的外键。相反,我想要两个以文本方式保持关系的字段。我不能丢失任何信息,表格已经包含数据。

Purchases.shop_id: (long)          -- is the field I need to drop
Purchases.shop: (characters) -- will hold the Shop's name
Purchases.shop_user: (characters) -- will hold the Shop's user name.

Shop.id: (long, pk) -- still referenced from Purchases
Shop.name: (characters) -- Shop's name
Shop.user: (characters) -- Shop's user name

两个字段是必需的,因为商店在 (name,user) 上是唯一的(当然是 id)。

ALTER TABLE Purchases ADD COLUMN shop CHARACTER VARYING(255);
ALTER TABLE Purchases ADD COLUMN shop_user CHARACTER VARYING(255);

-- ???

ALTER TABLE Purchases DROP CONSTRAINT shop_id_fk;
ALTER TABLE Purchases DROP COLUMN shop_id;

所以开头和结尾很简单,有人可以帮忙处理中间部分吗? :)

我知道外键是为此制作的,但我必须这样做。

最佳答案

你好像走错了路。您的原始规范化模式通常更优越。如果需要显示店铺/用户,创建一个VIEW .

但你可能有你的理由,所以这里是:

UPDATE purchases p
SET (shop, shop_user) = (s.name, s."user")
FROM shop s
WHERE s.id = p.shop_id;

不要使用 reserved word “用户” 作为标识符。
而且“名字”也几乎不是一个好名字
Postgres 中的 varchar(255) 通常表示误解。

关于 varchar(255) :

关于sql - 重构字段的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24558650/

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