我想存储我家里的杂货数量并向我展示菜肴,我可以根据它做饭。
我希望尽可能精确,这就是我想区分的原因,例如冷冻和新鲜浆果或低脂肪和普通牛奶之间。但我对此建模存在问题。我有以下表格:
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 milk
和low fat organic milk
作为单独的产品并删除Type
表Type.id
外键,并将产品的所有类型作为JSON或CSV放在types
Amounts
列中
n
个类型,并将n
Type{1..n}.id
列添加到Amounts
- 如果产品的类型少于n
,则将列设置为NULL / LI>
但在我这样做之前,我很想知道是否有更好的解决方案。
答案 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_id
和type_id
。然后为产品和类型之间的每个关系插入一行。
您可以在this post中找到一个示例。