防止反规范化

Prevent denormalization

我想知道在这种情况下如何防止反规范化:

Table Categories:

- id
- name

Table Category_types:

- id
- name

Association table: (category and category types are in a many-to-many relationship)

- id
- id_cat
- id_cat_type

我有一个 table Request,我必须在其中存储有关此 RequestCategoryTypeCategory 的信息。 目前架构是:

Request:

 - id
 - title
 - desc
 - id_cat
 - id_cat_type

顺便说一句,我认为这是个坏主意,因为 id_cat 和 id_cat_type 之间存在函数依赖关系(我猜?)。 我想我可以解决存储关联 ID table

的问题
Request:

 - id
 - title
 - desc
 - id_association_table

我知道拆分 table 可能是最好的选择,但我想知道是否有其他方法可以解决此类问题。

谢谢

-- Category CAT exists.
--
category {CAT}
      PK {CAT}
-- Category type TYP exists.
--
ctype {TYP}
   PK {TYP}

对于每个类别,该类别可能属于不止一种类别类型。对于每个类别类型,可能有多个类别属于该类别类型。

-- Category CAT is of type TYP.
--
category_ctype {CAT, TYP}
            PK {CAT, TYP}

FK1 {CAT} REFERENCES category {CAT}
FK2 {TYP} REFERENCES ctype    {TYP}
-- Request REQ is of category CAT, category type TYP.
--
request {REQ, CAT, TYP}
     PK {REQ}

FK {CAT, TYP} REFERENCES category_ctype {CAT, TYP}

注:

All attributes (columns) NOT NULL

PK = Primary Key
FK = Foreign Key