具有多种内容类型的i18n的数据库布局

时间:2014-01-04 11:26:21

标签: php sql database laravel-4

首先:我确实进行了搜索,但是我找不到任何可以帮助我解决具体问题的事情。

问题是,我正在构建我自己的CMS系统,当我为自己做这个并学习并将我的编程技能扩展到网络时,我想从头开始以正确的方式进行。

目标:

基于“节点”构建的多语言网站,其中内容可以是静态页面,博客,图库......您可以将其命名。我用好老的OOP来解决这个问题。

问题是,我不太确定构建数据库方案的最佳方法是什么,尤其是性能方面。我的意思是,我希望尽可能快地保持它的可扩展性。 (基本上没有不必要的查询)

我使用的是由此组成的NODE表:

id | parent_id | level/depth | name (human identifier)

然后我有一棵树,保存从每个节点到其后代的所有不同路径

id | ancestor | descendant

(如果你想知道为什么我在节点上冗余地保存了parent_id - 那就是自动构建树!)

因此,要将内容映射到节点,我有这个映射器:

id | node_id | language_id | type_id | content_id | slug

其中type_id引用诸如“Page”或“Blog”之类的类型,“Gallery”和content_id将引用其各自表中的实际“页面”或“博客”。 (博客会有一个“blog_posts”表,他们会引用特定的博客等。)

因此,对于每个节点和语言组合,我可以指定不同的类型(因此ID为3的节点可以是博客或静态页面,仅取决于语言,可以在“/ en / I-am-”下访问a-blog“或”/ de / hallo-welt“)

但我对这种做法不太确定。我可以将slug保存到内容表本身(不必要)。

除此之外,我甚至可以添加另一层抽象,在实际内容和映射器之间使用“内容”表,这将保留所有内容。但是我不太确定在可扩展性和性能之间做出什么样的妥协。

但如上所述,我在这里问你在我的职位上会做些什么:)

我真的希望这没有重复我忽略了,我根据这个社区的规则做了一切。

度过美好的一天!

干杯, Nalrakesh

1 个答案:

答案 0 :(得分:0)

这是一个精彩的PHP本地化类包的链接,该包为本地文件和数据库,用户的首选项设置。

PHP类以三个简单的级别引用内容"容器","部分"和"元素"。

下载包中包含一个sql脚本,用于在MySQL DB中创建il8n本地化架构。为什么不利用监管标准?即使您想使用不同的数据库类型,您仍然可以至少参考模式来创建自己的模式。

我希望这会有所帮助。

链接:http://www.phpclasses.org/package/2444-PHP-Get-internationalized-texts-from-databases-or-XML.html#download