有没有一种方法可以在不复制该组织的情况下实现具有多种类型的组织?

Is there a way to implement an organization with many types without duplicating this organization?

我是 postgresql 和数据库系统的新手。

我有两个这样的table:

组织Table

CREATE TABLE public."Organization"
(
    org_id integer NOT NULL DEFAULT nextval('"Organization_org_id_seq"'::regclass),
    org_name "char" NOT NULL,
    org_description "char" NOT NULL,
    org_email citext COLLATE pg_catalog."default" NOT NULL,
    org_phone "char" NOT NULL,
    bt_id integer,
    CONSTRAINT "Organization_pkey" PRIMARY KEY (org_id),
    CONSTRAINT bt_id1 FOREIGN KEY (bt_id)
        REFERENCES public.business_type (businesstype_id) MATCH SIMPLE
        ON UPDATE CASCADE
        ON DELETE CASCADE
        NOT VALID
)

企业类型table

CREATE TABLE public.business_type
(
    businesstype_id integer NOT NULL DEFAULT nextval('business_type_businesstype_id_seq'::regclass),
    businesstype_description "char" NOT NULL,
    CONSTRAINT business_type_pkey PRIMARY KEY (businesstype_id)
)

业务类型有 4 个值。我想实现一个系统,其中组织的类型可能介于 0 和 4 之间,而无需复制组织以具有不同的类型。对于我的模式,对于具有两种类型的组织,我需要两次插入组织,org_id 不同,bt_id 不同。

有没有一种方法可以实现组织具有相同 org_id 和多个 bt_id 的模式,而无需多次插入?此外,我希望业务类型始终不同。例如,一个组织可能有业务类型 1,或 1,2,3,但不是 1,1。

您描述的是组织和业务类型之间的多对多关系。要存储该关系,您可以创建第三个 table:

create table organization_business_type (
    org_id integer 
        references organization(org_id)
        on delete cascade,
    businesstype_id integer 
        references business_type(businesstype_id)
        on delete cascade,
    primary key (org_id, businesstype_id)
);

这允许每个组织有 0 到 N 个业务类型,同时禁止重复(后者由主键执行)。

因此,您需要从 organization table 中删除列 bt_id

旁注:在 Postgres 中,don't use upper case table or column namespublic."Organization" 实际上应该是 public.organization