具有任意行数列的表

时间:2017-02-17 16:10:56

标签: sql

我想存储我家里的杂货数量并向我展示菜肴,我可以根据它做饭。

我希望尽可能精确,这就是我想区分的原因,例如冷冻和新鲜浆果或低脂肪和普通牛奶之间。但我对此建模存在问题。我有以下表格:

Products          Type             Amounts
id | name         id | name        id | Products.id | Type.id | amount
---|----------    ---|------       ---|-------------|---------|-------
1  | milk         1  | frozen      1  | 1           | 2       | 1l
2  | strawberry   2  | low fat     2  | 1           | 3       | 0.5l
                  3  | organic     3  | 2           | 1       | 500g
                  4  | fresh       4  | 2           | 4       | 250g

到目前为止,我没有问题,但我如何储存有两种或更多种类型的产品(例如低脂肪,有机牛奶)?

我能做的事情:

  • 创建organic milklow fat organic milk作为单独的产品并删除Type
  • 删除Type.id外键,并将产品的所有类型作为JSON或CSV放在types
  • 的新Amounts列中
  • 每个产品限制为n个类型,并将n Type{1..n}.id列添加到Amounts - 如果产品的类型少于n,则将列设置为NULL / LI>

但在我这样做之前,我很想知道是否有更好的解决方案。

2 个答案:

答案 0 :(得分:1)

区分通用的“产品”和库存中产品的特定实例的“项目”。

然后使用属性“标记”。这实质上是一个实体 - 属性 - 价值关系。行可能是:

item    product id          tag
A        1 [milk]           organic
A        1                  low-fat
B        1                  organic

这个想法是将“product”(通用)和“item”的概念分开,这是一个可能有其他标签的特定实例。

然后是“金额”表:

item     Amount    Unit
A        1         liter

标签当然可以在另一个表格中,以确保产品内部和产品之间的一致性。例如,您可能会问:我可以使用手头的有机产品(产品)做什么?

答案 1 :(得分:-1)

产品< - >类型是多对多关系。每种产品都可以有多种类型,并且可以有许多特定类型的产品。要在关系数据库中对此进行建模,您需要一个所谓的映射表。该表格有两列:product_idtype_id。然后为产品和类型之间的每个关系插入一行。

您可以在this post中找到一个示例。