Sql 将关系数据库中的一个项与一个或多个其他项关联

Sql 将关系数据库中的一个项与一个或多个其他项关联,sql,database,Sql,Database,我有一个要存储在数据库中的项目列表。每个项目可以与一个或多个预定类别相关联。类别列表可能会随着时间的推移而增加。将一个项目与一个或多个类别对象关联的最佳方式是什么?我曾考虑将列表序列化并将其放入单个单元格中,但这似乎与关系数据库的整个概念背道而驰 我可能需要的功能可能是按类别筛选项目列表,并查找属于某个类别的所有项目 所以在回应评论时,我会尽量表达我的歉意 那么举个简单的例子怎么样: 假设你有一份食物清单,每种食物都可以分为不同的类别。你可以有一张简单的桌子 food_name | c

我有一个要存储在数据库中的项目列表。每个项目可以与一个或多个预定类别相关联。类别列表可能会随着时间的推移而增加。将一个项目与一个或多个类别对象关联的最佳方式是什么?我曾考虑将列表序列化并将其放入单个单元格中,但这似乎与关系数据库的整个概念背道而驰

我可能需要的功能可能是按类别筛选项目列表,并查找属于某个类别的所有项目

所以在回应评论时,我会尽量表达我的歉意

那么举个简单的例子怎么样:

假设你有一份食物清单,每种食物都可以分为不同的类别。你可以有一张简单的桌子

    food_name |  category 

    Apple |  sweet  
    Chicken | Cooked food   
如果你想把一种食物分为两类,你应该怎么做

    Apple |   sweet   
    Chicken | Cooked food   
    Apple pie |   cooked food, sweet   
    biscuit cracker |   salty, snack food   
我认为这不是一个好方法,因为它涉及到编码和解码的另一个步骤。因此,我想知道是否有更好的方法基本上可以将数据列表存储在表的单个单元格中


PS抱歉,我使用屏幕阅读器,希望您理解我正在制作的表格。

这是一个标签系统。在它最简单的化身中,它使用三个表。在您的情况下,它们将是食品、类别和食品类别

Food包含FoodID或FoodName列作为主键。该值唯一地标识每个记录。它还可以包含与该食物相关且仅与该食物相关的任何其他列

类别包含列类别作为主键。它还可以包含有关类别的描述性列

最后,FoodCategories正好包含两列,FoodID和Category。FoodID是表Foods的外键,Category是表类别的外键。这两列加在一起,即FoodID、Category是该表的主键


要将食品添加到类别中,请在FoodCategories表中插入一条记录。要将相同的食品添加到另一个类别,请在此表中插入另一条记录。要从一个类别中删除一种食物,您需要删除相应的记录。

也许可以看看关系数据库基础知识的教程。它应该涵盖that@x4rf41好的,谢谢你的建议-我已经试着说得更清楚了。谢谢,这听起来不错。我可以问一下:那么,例如,在一个类别下实际检索所有食物的效率有多高?反之亦然?它的复杂度是否为n,因为它们不是表中唯一的键,所以必须遍历整个表。或者它们是外键这一事实加快了表的速度,允许某种索引?在我列出的确切设置中,按类别搜索食品类别不会使用索引。您可以在该表类别上设置主键,改为FoodID,但这将使FoodID搜索没有索引,或者在该表的类别上添加额外的索引。