【发布时间】:2021-01-09 01:02:43
【问题描述】:
我想知道在这种情况下如何防止非规范化:
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
我有一张表Request,我必须在其中存储有关Category 的Request 和CategoryType 的信息。
目前架构是:
Request:
- id
- title
- desc
- id_cat
- id_cat_type
顺便说一句,我认为这是一个坏主意,因为 id_cat 和 id_cat_type 之间存在函数依赖关系(我猜?)。 我想我可以解决这个存储关联表的id的问题
Request:
- id
- title
- desc
- id_association_table
我知道拆分表可能是这里的最佳选择,但我想知道是否有其他方法可以解决此类问题。
谢谢
【问题讨论】:
-
如果一个类别可能只有一种类别类型,您最好只在引用
Category_types.id的Categories表中添加一个新列。如果不是这种情况,那么您在谈论的功能依赖是什么?无论如何,您所写的仅用于此目的的关联表似乎是多余的。 -
嗨,对不起,也许我必须编辑我的问题以明确解释 Category 和 CategoryType 存在多对多关系。这就是为什么我需要关联表
-
好的,现在变得更容易了。您必须了解使用关联表的所有可能方式。如果您打算仅对请求使用所谓的“功能依赖”,则让
Request成为关联表本身,否则使用单独的表。这两种方法都很好,您只需要决定哪种方法最合适。 -
这个不清楚。您没有明智地使用术语。 “防止非规范化”是什么意思?你认为“非规范化”是什么意思?你认为“标准化”是什么意思?请通过编辑而不是 cmets 进行澄清。 PS 如果您不知道某处是否有 FD,请查找教科书和相关定义、事实、算法和启发式方法并询问 1 个(具体研究非重复)问题,了解您第一次遇到的问题。如果你不知道如何去做你想做的任何事情,同样的事情。但目前尚不清楚您的目标是什么,或者您的“问题”或疑问是什么。
-
@PavelSmirnov 感谢您的帮助!我认为就我而言,最好的方法可能是使用单独的表格。那是因为我希望每个
Request都尊重Category和Category Type之间定义的关联约束。我不希望每个Request都定义自己的关联。
标签: database database-design database-normalization functional-dependencies denormalization