gpt4 book ai didi

postgresql - 如何在没有 FK 的情况下映射表

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

我有这些表:

  • 洗车
  • 订购
  • 订单历史
  • 用户
  • 服务

连接:一个carWash到多个orders,一个order到一个orderHistory,一个carWash 到许多服务,一个用户到多个订单

问题是:当用户创建订单时,他从服务表中选择一些由 car_wash 提供的服务,例如 (wash_car_body = 20$, wash_wheels = 10$),当用户想查看订单时history 我想向用户展示所有选择的服务,如何做得更好?

我的服务脚本:

create table services(
id SERIAL not null,
car_wash_id int not null,
name text not null,
price double precision not null,
car_body text,

CONSTRAINT "gmoika_service_company_id_fKey" FOREIGN KEY (car_wash_id)
REFERENCES car_wash (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)

洗车脚本:

create table services(
id SERIAL not null,
name text not null)

例如

insert into services (car_wash_id, price , name car_body) values (1,20,wheels_wash,sedan)

当用户使用 id = "id" 创建洗车订单时,我使用以下脚本为他提供所有服务,

select * from services s where s.car_wash_id = "id".

然后用户选择服务。我想将选择的服务保存到订单历史记录中。订单历史脚本

CREATE TABLE order_history(
id SERIAL not null,
order_id int,
wash_price double precision,
car_body text,
box_number int,
car_wash_name text,
currency text,
time timestamp with time zone NOT NULL,
status text,
CONSTRAINT "gmoika_wash_history_id_fKey" FOREIGN KEY (order_id)
REFERENCES order (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)

最佳答案

您需要添加另一个表,例如orderServiceHistory,它将是 order_idservice_id 的映射。这两个都是 orderservices 表的外键。然后,您可以使用它来存储哪些服务是从历史洗车订单中获取的。

但是,我建议您多考虑一下您的架构。有几件事需要考虑:

  1. 为什么混合使用复数和单数形式(例如 orderservices)
  2. 你还没有定义你的主键
  3. orderorderHistory 之间一对一映射的目的是什么?
  4. 当服务价格发生变化时,您会如何处理?
  5. 如何处理服务和洗车等服务的移除/停用?

关于postgresql - 如何在没有 FK 的情况下映射表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45296654/

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