簡體   English   中英

如何將三個相同的表歸一化為一個表?

[英]How to normalize three identical tables into one table?

我有三個表:

類別 1:

id(PK)
name
description

類別 2:

id(PK)
name
description
cat1_id1(FK)

三類

id(PK)
name
description
cat2_id(FK)

cat1 有一對多的 cat2,cat2 有一對多的 cat3。

如何將三張表歸一化為一張表?

比如這個設計:

CREATE TABLE IF NOT EXISTS public."animalGroups_animalgroup"
(
    id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY , 
    name    text
    description text COLLATE pg_catalog."default" NOT NULL,
    images character varying(100) COLLATE pg_catalog."default" NOT NULL,   
)

CREATE TABLE IF NOT EXISTS public.category_category
(
    id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY ,
    name character varying(100) COLLATE pg_catalog."default" NOT NULL,   
    description text COLLATE pg_catalog."default" NOT NULL,
    images character varying(100) COLLATE pg_catalog."default" NOT NULL,   
    animalgroup_id(FK)
)

CREATE TABLE IF NOT EXISTS public.subcategory_subcategory
(
    id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY ,
    name character varying(100) COLLATE pg_catalog."default" NOT NULL,   
    description text COLLATE pg_catalog."default" NOT NULL,
    images character varying(100) COLLATE pg_catalog."default" NOT NULL, 
    category_id(FK)
)

CREATE TABLE IF NOT EXISTS public.animal_animal
(
    id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY ,
    name character varying(100) COLLATE pg_catalog."default" NOT NULL,  
    description text COLLATE pg_catalog."default" NOT NULL,
    images character varying(100) COLLATE pg_catalog."default" NOT NULL,
    subcategory_id(FK)
)

  • animalgroup 可以有一個或多個類別
  • 類別可以有一個或多個子類別
  • 子類別可以有一個或多個動物

它會是什么樣子:

  • 動物群有哺乳動物
  • 哺乳動物(可以有更多類別)例如類別貓,狗
  • 貓類別(可以有更多子類別)有例如子類別小貓,大貓
  • 小貓(子類別可以有更多的動物)有真正的貓種布娃娃

這個設計正確嗎?

他們有四個相同的領域。 要再添加一個字段,例如年齡,那么我必須在所有四個表中添加字段年齡。

好的,你改變了你的數據庫設計,這樣會像這樣:

 SELECT * -- should specify columns here
 FROM cat1
 LEFT JOIN cat2 on cat1.id = cat2.cat1_id1
 LEFT JOIN cat3 on cat2.id = cat3.cat2_id

命名差異(cat1_id1 與 cat2_id)很奇怪——我認為 1 可能是錯字。


原回答如下

我猜你的桌子實際上是這樣的

類別 1:

id
cat2id
name
description

類別 2:

id
cat3id
name
description

三類

id
name
description

在我添加的列中,一對多關系由它們相關的 id 表示。

在那種情況下,你可以像這樣加入他們

SELECT * -- should have column list here
FROM cat1
LEFT JOIN cat2 on cat1.cat2id = cat2.id
LEFT JOIN cat3 on cat2.cat3id = cat3.id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM