在PHP中创建多站点数据库体系结构

时间:2012-11-20 11:54:25

标签: php sql sites

通过多站点系统,我指的是具有相同版本的多个窗格的系统。一个例子是Gamespot,它显示不同的发布日期甚至不同的游戏,具体取决于你是否使用uk.gamespot,us.gamespot等。

这里的网站选择不是这个问题。问题在于流程和开发的简易性以及如何选择或输入特定于站点的数据。还有可能不需要各种系统组件特定于站点,并且在极少数情况下,要求所有站点的所有数据都可见并可选择用于报告和管理目的。

我们已经考虑过以下技术,虽然我们知道它们会起作用,但我们对其实施的繁琐性质感到不满:

表格视图 - 通过为每个表上的每个站点创建多个视图,我们可以加载要查询的特定于站点的数据。但是,内联SQL必须动态调用正确的视图,并且在创建新站点的情况下,必须创建一整套新视图。

SQL修改 - 通过创建SQL中介函数,可以修改SQL以将where子句和联接更改为仅选择特定于站点的数据的目标列。但是,我们认为通过此类设备运行所有查询可能会遇到严重问题,并可能限制我们的查询灵活性。

内联网站条款 - 尽管这是最麻烦和最难以实施的,但它将被证明是最可靠的,因为我们能够在编码方式上执行标准。虽然这可能是最可靠的,但它对我们的开发人员来说也是最不吸引人的,它意味着为几乎每个查询编写站点子句。

因此,我们不是找到在系统的更高层次上实现此系统的最佳方法,而是试图找到一种方法,允许在基础级别上相当简单地实现站点特定的数据选择。

如果这个问题在任何方面都过于宽泛,请告诉我,我会尝试进一步缩小范围。

首先编辑:

站点间的数据类型与表格相同。用户表将在所有站点之间共享,每个用户只能访问一个,部分或所有站点。

让我们进一步了解Gamespot示例。一位用户负责管理英国版本。

有关游戏及其评论的信息是从可访问所有网站的记录中提取的,因为这是全球相关的信息 但是,假设发布日期来自另一个特定于站点的表。 有关游戏的信息是以典型的方式检索的,但是获取发布日期需要一些额外的代码才能获得正确的网站。

关于用户,无论用户当前管理的哪个网站,都应该是选择和插入目标的网站。

您可以想象,发布日期不是核心表,并且每个日期都不能直接映射到相应的游戏。

(我并不暗示对Gamespot的运作有任何了解,这个例子是假设的)

1 个答案:

答案 0 :(得分:1)

我认为这里没有一般性答案,因为我们对您正在构建的实际网站了解不够。以下是一些与最佳设计有重大关系的问题示例:

  1. 网站之间的内容大多重叠,还是大部分不同?
  2. “常见”内容和“特定”内容之间是否存在简单划分? (即内容对所有网站都是通用的,或仅对一个网站是特定的)。还是需要更灵活?
  3. 您希望这些要求随着时间的推移发展多少?
  4. 我的建议是将精力集中在正确的表结构上以存储您的数据。如果你做对了,一个好的软件设计应该从它自然流动。

    当然,随时可以提出任何具体问题!

    更新问题后

    编辑,我仍然认为存在很多歧义,只有在您制定具体设计时才能解决。但是如果你想快速回答,我认为内联网站条款是你建议的三个选项中最好的。其他人增加了不必要的复杂性。

    我不明白为什么内联网站条款“麻烦”和“恼人”。它们不会在良好的设计中引入重复,因为您可以在PHP中以编程方式处理它们。