建立表与表之间的关联(Day28)

文章同时发布於: https://kevinyay945.com/smart-home-tutorial/028/

在之前的过程中,已经建立了request以及command,而预计的规划是可以透过一个command来触发多个request的功能,而且多个command可以触发同一个request,而触发的顺序可以自己定义,那要完成这个需求,预计要多开一张表,名为commands_requests,而这张表的主要目的是要将commands跟requests建立起关联,因此目前规划的栏位有

name type
uuid uuid
commands_uuid uuid
requests_uuid uuid

另外,因为需要有触发顺序,所以栏位中要多上一个顺序的栏位

name type
uuid uuid
commands_uuid uuid
requests_uuid uuid
order int

并且

  • commands_requests.commands_uuid <= command.uuid
  • commands_requests.requests_uuid <= requests.uuid

将相关的栏位做foreign key的关联,这样做就可以让资料库来帮我们保证在commands_requests中的两个uuid都一定存在於另外两张表中

资料库语法如下

CREATE TABLE public.commands_requests  
(  
  uuid uuid        NOT NULL DEFAULT uuid_generate_v4(),  
  create_at timestamptz NOT NULL DEFAULT now(),  
  update_at timestamptz NOT NULL DEFAULT now(),  
  commands_uuid uuid        NOT NULL,  
  requests_uuid uuid        NOT NULL,  
  "order" int8        NOT NULL,  
  CONSTRAINT commands_requests_pk PRIMARY KEY (uuid),  
  CONSTRAINT commands_requests_fk FOREIGN KEY (commands_uuid) REFERENCES public.commands (uuid) ON DELETE SET NULL ON UPDATE CASCADE,  
  CONSTRAINT commands_requests_fk_1 FOREIGN KEY (requests_uuid) REFERENCES public.requests (uuid) ON DELETE SET NULL ON UPDATE CASCADE  
);

另外,因为有发现到之前的commands跟requests并没有primary key,所以也将建立Primary Key的语法补上去

ALTER TABLE public.commands  
  ADD CONSTRAINT commands_pk PRIMARY KEY (uuid);  
ALTER TABLE public.requests  
  ADD CONSTRAINT requests_pk PRIMARY KEY (uuid);

最後,因为怕在自动产生uuid的extension在postgresql中没建立,所以将建立这个extension的功能也放上

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

另外,也补上了之前没写到的down档

影片和code如下

https://www.youtube.com/watch?v=ScRe3zVh8-E

https://github.com/kevinyay945/smart-home-backend/tree/0442b034cb84a31bbb59858f70f64a5aa871578f


<<:  【Day ?(31)】测试环境无法登入

>>:  TypeScript - 入坑安装指南

Day 14 虚拟环境

Python虚拟环境的主要目的是为不同的Python项目创建一个彼此独立且隔离的环境。这样我们可以在...

Day26. 星多天空亮,人多智慧广 - Plugins

来到了第 26 天,其实我们快把所有的模组都走过一遍了,今天是最後一天单独介绍某个特色的,接下来 3...

【在厨房想30天的演算法】Day 22 演算法 : 最短路径 Shortest Path Bellman–Ford 演算法

Aloha!我是少女人妻 Uerica!我家狗狗每天六点都会叫我起床,但除非自己很早睡,不然六点起床...

数位变革

在疫情爆发之前,一切的一切看似都非常的正常,但是在爆发之後,所有的一切都被疫情给打乱了,并且所有的秩...

Day24

9.5节提到判断方法(predicate function)的概念,简单来说就是许多容器类别: 如...