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

时间:2014-05-09 19:06:38

标签: sql database

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

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

所以回应评论我会更加清楚道歉。

那么快速举例如何:

假设您有一份食物清单,每种食物都可归类为不同类别。你可以有一个简单的表

    food_name |  category 

    Apple |  sweet  
    Chicken | Cooked food   

如果你想将食物分为两类,你应该怎么做?

    Apple |   sweet   
    Chicken | Cooked food   
    Apple pie |   cooked food, sweet   
    biscuit cracker |   salty, snack food   

我认为这不是一个好方法,因为它涉及编码和解码的另一个步骤。所以我想知道是否有更好的方法可以基本上将数据列表存储在表格的单个单元格中?

PS道歉我使用屏幕阅读器,所以希望你理解我想要的表格。

1 个答案:

答案 0 :(得分:1)

这是一个标记系统。在它最简单的化身中它使用三个表。在您的情况下,它们将是FoodsCategoriesFoodCategories

Food包含FoodID列或FoodNamePRIMARY KEY。该值唯一标识每条记录。它还可以包含与该食物相关的任何其他列(仅限该食物)。

Categories包含CategoryPRIMARY KEY。它还可以包含有关该类别的描述性列。

最后,FoodCategories恰好包含两列,FoodIDCategoryFoodID是表FOREIGN KEY的{​​{1}},而Foods是表Category的{​​{1}}。两列在一起FOREIGN KEY)是此表的Categories

要将食物“添加”到某个类别,您可以FoodID, Category将记录添加到PRIMARY KEY表中。要将同一食物添加到另一个类别,您可以在此表格中INSERT 另一个记录。要从某个类别中删除食物,请FoodCategories相应的记录。