【发布时间】:2010-06-21 12:32:33
【问题描述】:
我们正在改进我们的产品,以便为每个客户高度定制。目前我们必须为每个客户端维护单独的数据库,这会严重影响持久层。
我们对新数据库架构的主要目标是可扩展性。我不是专家数据库设计师,因此需要专家的意见:)。
我正在考虑扩展(姐妹)表方法。对于每个核心表,都可能有一个姊妹表,扩展字段将驻留在其中。这样,我们可以为核心表和扩展表开发单独的持久层。
如果我把它分成两个数据库怎么办。核心和扩展数据库。这将简化维护。
【问题讨论】:
我们正在改进我们的产品,以便为每个客户高度定制。目前我们必须为每个客户端维护单独的数据库,这会严重影响持久层。
我们对新数据库架构的主要目标是可扩展性。我不是专家数据库设计师,因此需要专家的意见:)。
我正在考虑扩展(姐妹)表方法。对于每个核心表,都可能有一个姊妹表,扩展字段将驻留在其中。这样,我们可以为核心表和扩展表开发单独的持久层。
如果我把它分成两个数据库怎么办。核心和扩展数据库。这将简化维护。
【问题讨论】:
制作单独的数据库将不允许您使用 PK 和 FK 实现本机参照完整性。它还增加了维护的复杂性。
如果您的 RDBMS 支持模式,您应该在单个数据库中利用多个模式。
另外,如果你是数据库新手,你应该学习规范化和数据库设计(这个网站上有一些很好的主题)。
【讨论】:
在 PostgreSQL 中,您可以拥有继承的表。例如,如果您的表 A 包含列 (x,y,z),则可以让表 A-sub-1 继承自 A,但也添加列 (i,j,k) 和表 A-sub-2而是添加列 (d,e,f)。
这样做的一个好处是您的一些 SELECT 语句可以保持不变:默认情况下,从父表中选择也会从所有子表中选择。那些只使用通用元素的语句不需要更改。需要自定义 INSERT/UPDATE/DELETE 语句以针对特定的派生表。
请注意,这里需要支付 PK 和 FK 不能应用于整体结构的成本。每个继承的表本身仍然是一个独立的表,并处理自己的约束。也就是说,您不能在父表上拥有 PK 或 FK,并使其自动应用于所有子表。
【讨论】: