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

在PHP中创建多站点数据库体系结构,php,sql,sites,Php,Sql,Sites,对于多站点系统,我指的是具有多个相同版本窗格的系统。Gamespot就是一个例子,它显示了不同的发布日期,甚至不同的游戏,这取决于您是否在uk.Gamespot、us.Gamespot等网站上 这里的选址不是这个问题。问题是开发过程和易用性,以及如何选择或输入特定于站点的数据。此外,各种系统组件也可能不需要特定于现场,在某些罕见的情况下,出于报告和管理目的,需要所有现场的所有数据都是可见的和可选择的 已经考虑了以下技术,尽管我们知道它们会起作用,但我们对其实现的繁琐性感到不满意: 表视图- 通过

对于多站点系统,我指的是具有多个相同版本窗格的系统。Gamespot就是一个例子,它显示了不同的发布日期,甚至不同的游戏,这取决于您是否在uk.Gamespot、us.Gamespot等网站上

这里的选址不是这个问题。问题是开发过程和易用性,以及如何选择或输入特定于站点的数据。此外,各种系统组件也可能不需要特定于现场,在某些罕见的情况下,出于报告和管理目的,需要所有现场的所有数据都是可见的和可选择的

已经考虑了以下技术,尽管我们知道它们会起作用,但我们对其实现的繁琐性感到不满意:

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

SQL修改- 通过创建SQL中介函数,可以修改SQL以更改where子句并将其连接到只选择特定于站点的数据的目标列。然而,我们相信,通过这样的设备运行所有查询可能会有严重的问题,并可能限制查询的灵活性

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

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

如果这个问题在任何方面都过于宽泛,请让我知道,我将尝试进一步缩小范围

第一次编辑:

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

让我们把Gamespot的例子看得更远一点。一个用户负责管理英国版本

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

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

正如您所想象的,发布日期不是一个核心表,并且每个日期不能直接映射到它各自的游戏


(我并不意味着对Gamespot的工作原理有任何了解,这个例子是假设的)

我认为这里没有一个通用的答案,因为我们对您正在构建的实际站点了解不够。以下是一些对最佳设计有重大影响的问题示例:

  • 网站之间的内容主要是重叠的还是不同的
  • “普通”内容和“特定”内容之间是否存在简单的划分?(即,内容对于所有站点都是通用的,或者只针对一个站点)。还是需要更加灵活
  • 随着时间的推移,您预计需求会有多大程度的变化
  • 我的建议是将精力集中在正确的表结构上以存储数据。如果你做对了,一个好的软件设计应该自然而然地从中产生

    当然,在这一过程中,您可以随时提出任何具体问题

    编辑:在您的问题更新之后,我仍然认为存在很多歧义,只有在您制定具体设计时才能解决。但是如果你想要一个快速的答案,我认为内联站点子句是你建议的三个选项中最好的。其他的增加了不必要的复杂性


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

    我曾预料到内联SQL可能是最可行的。我去寻找一颗神奇的子弹,这简直是一厢情愿。数据库的设计应该规范化,通过正确使用外键和在需要时使用站点引用作为查询的基本主题,好的设计应该看到实现相当简单。谢谢你的回答。