-1

我正在编写一本在线食谱书,其中有许多食谱、成分、类别等。我必须实现管理员可以将相关食谱添加到给定实体的对象(例如,一个类别有许多相关食谱,根据我的客户的愿望应手动添加)。此外,相关食谱必须有订单,这也是手动设置的。所以我需要食谱和每个其他实体(类别、成分、食谱等)之间的多对多关系,另外我必须存储每个相关食谱的位置。

一种解决方案可能是为每个具有相关配方的实体设置一个表,并且每一行将包含该实体的一个 ID、一个配方 ID 和一个位置。这意味着我将拥有与我拥有的具有相关食谱的实体一样多的表,这似乎不是最好的解决方案。

另一种解决方案可能是有一个包含有关相关食谱的所有信息的表,然后每一行将另外包含另一个实体的类型。另外我对 DRY 原则非常严格,所以我想在不编写重复代码的情况下实现这一点,并使用 Doctrine2+Symfony2 来处理尽可能多的工作。

如果可能的话,最好的办法是我有一段代码(例如一个类),我可以重用它并将相关的配方功能添加到新实体中,而无需编写或复制粘贴大量代码。

什么是最好的类/数据库设计?我要强调的是,我正在使用 Doctrine2 + Symfony2,所以请尝试“在 Doctrine 中思考”。

先感谢您!

4

1 回答 1

1

我将创建以下表格:

category
--------
id
name

category_recipe
---------------
category_id
recipe_id
display_order (integer)

recipe
------
id
name
instructions

recipe_ingredient
-----------------
recipe_id
display_order (integer)
name
amount
unit

recipe_related
--------------
recipe_id
related_recipe_id
display_order

user_recipe
-----------
user_id
recipe_id
display_order

对于类别关系,由于引用表中的额外显示顺序值,您将不得不做更多的工作。您需要创建 RecipeCategory 对象,设置 id 值,设置显示顺序,然后保存它,而不只是将食谱添加到类别中。Doctrine 仍然能够在这些表之间创建关系,只是需要更多的手动工作。

我希望这可以帮助您走上正确的道路。

于 2012-04-29T03:24:39.317 回答