0

我正在寻找有关数据库设计的一些建议。

我正在 symfony2 平台上构建一个幻灯片应用程序,我有四种不同类型的幻灯片容器(公司、地理区域、财产和个人监视器)。这是为了组织内容和继承内容(监视器位于属性中,属性是地理区域的一部分等)。

现在,在平面 PHP 上,我将只使用两个表,“容器”和“内容”,并在容器表中放置一个类型字段,定义所讨论的容器是否是地理区域、属性等,并且只是链接每个内容片(即幻灯片)与 FK 到适当的容器。

现在,了解 symfony2 的实体系统,似乎我可以通过将不同的容器类型定义为单独的实体来获得很多继承,从而能够获取例如地理区域,并自动返回其所有子项动态对象(所有属性,以及属于该属性的所有监视器)。但是,我确实希望能够在不同容器和不同容器类型之间切换内容片段的“归属”。我觉得这对于所描述的方法会有些麻烦,如果内容片段必须具有“属于”四种不同实体类型中的任何一种的能力,那么内容片段的关系(FK)很可能会出现问题?

在 symfony2 世界中经验丰富的人也许可以启发我在这里进行的最明智的道路?

4

1 回答 1

1

在我们的项目中,我们使用Propel 1.6PropelBundle

它的语法对开发人员非常友好。一个很大的优点Propel是表之间的“假”关系。在您的模式中,只需定义skipSql = true标志,您就可以省略 FK 的生成,但一个对象可以通过定义的假关系与另一个对象一起获取。

在您的情况下,最终会出现如下内容:

$containers = ContainerQuery::create()->findByXXX('xxx');
$containers->getFirst()->getContents(); // Will return all joined content for the first container

在具有相关对象的对象填充期间 - 您获得了使用反向关系的绝佳机会:

$contents = $container->getContents();
$container = $contents->getContainer();

只需在评论中提问,我会根据您的需要扩展我的答案;)

于 2012-07-31T11:47:36.017 回答