实体& symfony2中的数据库设计

时间:2012-07-31 11:37:28

标签: php database-design symfony doctrine

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

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

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

现在,了解symfony2的实体系统,似乎我可以通过将不同的容器类型定义为单独的实体来获得大量继承,从而能够获取例如地理区域,以及自动返回其所有子对象(所有属性,以及属于该属性的所有监视器)。但我希望能够切换属于"属于#34;不同容器和不同容器类型之间的内容片段。我觉得这对于所描述的方法会有点毛茸茸,如果它必须具有"属于"的内容片段的关系(FK),则很可能会出现问题。四种不同类型中的任何一种?

在symfony2世界经验丰富的人或许可以启发我走向最明智的道路吗?

1 个答案:

答案 0 :(得分: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();

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