Database design 规范化输出到不同的数据库?

Database design 规范化输出到不同的数据库?,database-design,Database Design,每个人对跨多个数据库规范化一个数据库有什么看法。例如,假设您有一个允许不同客户销售产品的数据库。您已经抽象了订单、订单项等的概念,但每个客户都希望在此处或此处添加不同的字段 您可以将字段添加到特定的表中,创建一个包含并非所有客户端都使用的值的宽表,或者创建一个列出列名和值的高表,使其看起来像是将列附加到特定对象上(例如,当订单表上只存在一个工作电话号码时,需要一个家庭电话号码) 或者,您可以将其规范化为特定于客户端的数据库,该数据库具有一个名为CustomOrder的表,该表从通用数据库中保留原

每个人对跨多个数据库规范化一个数据库有什么看法。例如,假设您有一个允许不同客户销售产品的数据库。您已经抽象了订单、订单项等的概念,但每个客户都希望在此处或此处添加不同的字段


您可以将字段添加到特定的表中,创建一个包含并非所有客户端都使用的值的宽表,或者创建一个列出列名和值的高表,使其看起来像是将列附加到特定对象上(例如,当订单表上只存在一个工作电话号码时,需要一个家庭电话号码)

或者,您可以将其规范化为特定于客户端的数据库,该数据库具有一个名为CustomOrder的表,该表从通用数据库中保留原始订单id,然后添加容纳客户端所需的列

有人使用过这样的解决方案吗?我知道跨数据库的引用完整性很难控制,但它确实保持了原始通用数据库的小型和精简,同时允许客户根据自己的内心内容进行定制


每个人对这种类型的设计都有什么想法?

我明确建议不要创建多个数据库,听起来你想要的是这样的。如果你曾经需要扩展创建多个数据库的方法,那么这将变得更加困难。

我曾经与Siebel CRM系统合作过ich允许对其罐装应用程序进行大量定制。它通过允许扩展表来实现这一点。例如,客户的扩展表将与客户表建立一对一的关系,并将所有添加的列都包含在其中。

拥有这样的功能是一个好主意。理论上它非常有效。但即使在对特定于应用程序的字段进行特殊处理会遇到麻烦。每个应用程序可能有不同的业务逻辑(验证算法)。现在,在一个应用程序中有效的记录可能在另一个应用程序中无效。我的建议如下

保持数据库分开,但引入将它们链接在一起的内容。例如,出于报告目的,您可能希望知道来自一个应用程序的客户A与来自另一个应用程序的客户B相同。创建一个表(数据库),链接来自不同数据库的记录

除非我知道你具体问题的具体细节,否则我可能不会更进一步


PS:你所说的是。有一些商业产品试图解决这个问题,但没有一个能让我相信它真的有效(是的,它是用来查询数据的,但是更新呢?).

我在那种环境中工作过,这真是一场噩梦。我们有一个主应用程序,由一个团队管理,其他团队管理特定于客户端的定制。问题是,多个客户端得到的定制非常相似,但并不完全相同(尽管如果每个人在设计自己的客户之前都看一看其他客户在做什么,他们可能会这样做).由于开发适用于所有人的主要应用程序的团队是由公司而不是个人客户支付费用的,因此我们从未有足够的人员概括特定的客户需求,以便其他人在需要时可以使用这些需求,因此创建了20种不同的定制解决方案来完成相同的工作。此外,随着客户期限的延长最终比一般团队能够处理的时间要早(100个开发人员中只有两个),即使某些东西可以很好地进行泛化,也会在客户机数据库中进行处理,以满足dealines的要求。很快就出现了一个大混乱,重构数据库以修复设计缺陷变得不可能,因为有太多可能受影响的不同应用程序,没有人敢尝试重构。然后会发生什么对于一个特定的问题,en将是一个解决方案,但旧的方法将保留在那里,每个客户都会选择不同的方法来实现主应用程序数据库中的东西。在创建之后,尝试将设计团队添加到这个混乱中的组织更改导致几乎完全停止了可能需要的工作完成的原因是,如果没有对现有网站进行完全重写,所有新作品都不符合新的设计标准(客户当然不想为此付费,因为当前版本对他们来说效果很好)。离这个模型远点!

我不确定“规范化”一词是如何联系在一起的根据您的建议,但我认为这是一个粗略的反模式,在我熟悉的任何SQL理论或实践文献中都是不推荐的。

是ECAN客户端运行数据库的自己的副本,还是您在同一个数据库中托管所有的客户端?您需要多快的客户端字段?客户端的字段是否需要链接到其他选项卡?les,还是简单的文本字段?“列出列名和值的高表”永远不要这样做,当您需要执行复杂查询或提高性能时,您会后悔。有一个主数据库保存完全抽象的项,如订单和订单项。例如,客户机都希望将不同的字段附加到订单上(过于简化),客户机1希望订单上有国家,因此有一个带有国家字段的CustomOrders表。