我正在尝试创建一个数据库,该数据库将由为汽车维修店制作的应用程序使用。 我有一个服务'表中列出了几个具有相应价格的服务(例如换油,30美元)。我有另一张桌子"维修"我存储有关客户维修的信息。此表格的列价必须使用表格'服务'中的每个服务价格计算。 我熟悉使用'计算列的概念' ,但似乎我无法使用另一个表中的值计算列。 我在这里遗漏了什么或者我该如何处理这个问题?
答案 0 :(得分:0)
有一个名为" Price"的列在表格#34;维修",如果您试图存储提供给客户的所有服务的总价格,您不应该这样做。
为什么不尝试将服务记录插入"维修"提供给具有客户ID和维修ID的客户的每项服务的表。每项服务都将指向"服务"带有外键的表。这样您就可以查询维修的总价格,或者您可以创建一个显示所有维修总价格的视图。
以下是样本表的创建脚本:
-- Table named SERVICES:
CREATE TABLE "SERVICES"
(
"SERVICE_ID" NUMBER NOT NULL ENABLE,
"SERVICE_NAME" VARCHAR2(20 BYTE),
"SERVICE_PRICE" NUMBER,
CONSTRAINT "SERVICES_PK" PRIMARY KEY ("SERVICE_ID")
)
-- Table named CUSTOMERS:
CREATE TABLE "CUSTOMERS"
(
"CUSTOMER_ID" NUMBER NOT NULL ENABLE,
"CUSTOMER_NAME" VARCHAR2(20 BYTE),
CONSTRAINT "CUSTOMERS_PK" PRIMARY KEY ("CUSTOMER_ID")
)
-- Table named REPAIRS:
CREATE TABLE "REPAIRS"
(
"REPAIR_ID" NUMBER NOT NULL ENABLE,
"CUSTOMER_ID" NUMBER NOT NULL ENABLE,
"REPAIR_DATE" DATE,
CONSTRAINT "REPAIRS_PK" PRIMARY KEY ("REPAIR_ID")
)
-- Table named REPAIR_SERVICES:
CREATE TABLE "REPAIR_SERVICES"
(
"REPAIR_ID" NUMBER NOT NULL ENABLE,
"SERVICE_ID" NUMBER NOT NULL ENABLE,
CONSTRAINT "REPAIR_SERVICES_FK_1" FOREIGN KEY ("REPAIR_ID") REFERENCES "HR"."REPAIRS" ("REPAIR_ID") ENABLE,
CONSTRAINT "REPAIR_SERVICES_FK_2" FOREIGN KEY ("SERVICE_ID") REFERENCES "HR"."SERVICES" ("SERVICE_ID") ENABLE
)
如果您按照上述方式构建表格,则可以使用下面的脚本创建一个视图,该视图将为您提供包括所有服务在内的维修总成本。或者您可以使用该脚本进行查询。
CREATE VIEW V_REPAIR_PRICES AS (
SELECT REPAIRS.REPAIR_ID, REPAIRS.REPAIR_DATE, CUSTOMERS.CUSTOMER_NAME, T1.TOTAL_PRICE
FROM REPAIRS
INNER JOIN CUSTOMERS ON REPAIRS.CUSTOMER_ID = CUSTOMERS.CUSTOMER_ID
INNER JOIN
(
SELECT REPAIR_SERVICES.REPAIR_ID, SUM(SERVICES.SERVICE_PRICE) as TOTAL_PRICE
FROM REPAIR_SERVICES
INNER JOIN SERVICES ON REPAIR_SERVICES.SERVICE_ID = SERVICES.SERVICE_ID
GROUP BY REPAIR_SERVICES.REPAIR_ID
) T1
ON REPAIRS.REPAIR_ID = T1.REPAIR_ID
)