首先:我确实进行了搜索,但是我找不到任何可以帮助我解决具体问题的事情。
问题是,我正在构建我自己的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
答案 0 :(得分:0)
这是一个精彩的PHP本地化类包的链接,该包为本地文件和数据库,用户的首选项设置。
PHP类以三个简单的级别引用内容"容器","部分"和"元素"。
下载包中包含一个sql脚本,用于在MySQL DB中创建il8n本地化架构。为什么不利用监管标准?即使您想使用不同的数据库类型,您仍然可以至少参考模式来创建自己的模式。
我希望这会有所帮助。