我正计划有几张桌子,但我不太确定该如何设计“整件事”。我们会非常感谢你的帮助!)
我基本上是想模拟一个超市的食谱和配料。所以我在想:
我有点迷失了,我可以想象出几种解决方案来解决这个问题。从多个枢轴表和附加的枢轴表到真正的简单解决方案,这可能包括大量的跨表重复。
特别感兴趣的是关于创建一个“大”枢轴表而不是多个小表的:
我用的是Laravel,我对编码很陌生。如果有某种工具或东西可以使你的建议更容易,请让我知道,我会尝试一下!
提前谢谢你!
发布于 2014-12-03 00:15:30
我和Laravel第一次学这个遇到了很多麻烦。这个问题最重要的一点是,您可以使用迁移来尝试一些东西,如果不是最好的方法,可以将其回滚。
雄辩是基于活动记录模式,因此阅读活动记录指南将有很大的帮助。您的目标是数据库规范化。我在搜索“数据库规范化rails”时运气更好,因为RoR已经存在了很长时间,并且使用了相同的模式。
我发现继续做你刚开始做的事情更容易。
超市->有许多制造商。
制造商->属于许多->超市
产品->属于一->制造商。
制造商->有许多->产品。
如果一个产品总是有一个数量,而一个产品没有多少数量,那么通常最好把它放在产品表上。通常,一个产品会有wholesale_amt,retail_amt在桌面上。
如果您有类似于单位金额的内容:
unit_amount table:
id | title
1 pallet
2 case
3 box
4 single...than,您可以把它放在一个单独的表中。原因是这样,您可以很容易地修复拼写错误,只在一个地方添加一个不同的金额。如果您的开发人员在update sql中拼错了托盘,那么最终在产品表中不会出现重复的、拼写错误的记录。
产品表将有一个unit_amount列,该列存储id如下:
product table:
id | title | unit_amount
1 | water | 2对于许多到多个关系,您只需要一个枢轴表。枢轴表应该允许您执行这样的查询:
select * from manufacturer_product where manufacturer_id = 2...and为制造商2获取每一种产品。重要的是,如果制造商有许多产品,它们都是新的记录。
manufacturer_product table:
manufacturer_id | product_id
2 | 1
2 | 8
2 | 12 如果你的桌子上也有一个warehouse_id,而制造商有900个产品,但有2个仓库,那么这个系统就会崩溃:
manufacturer_id | product_id | warehouse_id
2 | 1 | 1
2 | 8 |
2 | 12 | 如果你有一堆其他的列,你就是1)。返回一堆不需要2的数据。)不能再使用雄辩的人际关系了。你打算给这张桌子起什么名字?
戴·里斯在这里有一本很棒的关于雄辩的人际关系的指南,对我来说真的很有帮助:
http://daylerees.com/codebright/eloquent-relationships
我基本上想要装载与“产品”相关的“成分”,而“产品”与“制造商”有关。
为此,你需要使用“有很多通过”的关系。看起来是这样的:
class Manufacturer extends eloquent {
public function products {
return $this->hasMany('Product');
}
public function ingredients {
return $this->hasManyThrough('Ingredient', 'Product'); //has many ingredients through products
}
}您可以这样查询这种关系:
$manufacturer = new Manufacturer;
$ingredients = $manufacturer->ingredients();相反的情况也是如此:
class Ingredient extends eloquent {
public function products {
return $this->belongsToMany('Product');
}
public function manufacturer {
//this is actually belongToThrough but they don't call it that
return $this->hasManyThrough('Manufacturer', 'Product');
}
}http://laravel.com/docs/4.2/eloquent#relationships
相反的情况会更令人困惑,请参见这里的讨论:
https://github.com/laravel/framework/issues/6161
1 2
https://stackoverflow.com/questions/27257115
复制相似问题