MySQL中的多对多关系

Kaj*_*aji 5 mysql database-design many-to-many join foreign-keys

我最近一直在读外键和加入,并且令人惊喜的是,许多基本概念都是我已经付诸实践的东西.例如,我正在处理一个项目,我正在组织单词列表,并有一个表集,如下所示:

`words` Table
    `word_id`
    `headword`
    `category_id`
`categories` Table
    `category_id`
    `category_name`
Run Code Online (Sandbox Code Playgroud)

现在,一般来说,这将是一对多的关系,其中几个单词与外键一起放在单个类别下category_id.让我们假设了一下,但是,用户选择另一类别添加到一个字,使其多到很多,有没有办法设置我的words表来处理其他类别的话不会产生像额外的列category_2,category_3,等等.?

Fru*_*ner 12

通常,您有一个单独的表来处理这些映射:

`Words_Categories` Table
    `word_id`
    `category_id`
Run Code Online (Sandbox Code Playgroud)

Words_Categories表中的每对表示从任何单词到任何其他类别的一种可能映射.

在此方案中,表中的category_id字段Words变得不必要,因为这些表中的任何一个都不直接相互引用.


Lar*_*tig 6

你不能创建像category_2和category_3这样的额外列.那种方式就是疯狂.

相反,您将从"单词"表中删除列"category_id".然后,您将创建一个包含"category_id"和"word_id"列的新表"category_words".要将单词放入类别,请在此表中插入记录.要将同一个单词放入另一个类别,请在表格中插入另一条记录.