2013-06-04 34 views
6

我目前处于开发产品新部分的数据库设计阶段。为此我需要有一个“完整性检查”或一些建议,因为我对设置的某些部分不感到过于自信。关于(overcomplex?)模式的SQL架构建议

的背景信息

我们正在开发的产品是所谓的“营销投资回报率最大化系统” A位。它处理大数据并在将其发送到不同的营销渠道之前处理/增强/丰富大量信息。这基本上就是它的概括。

问题域

该系统目前并不完全拥有数据的良好验证,并正在由“营销”的人,我们称之为“自我服务”的客户提供什么每天都在“被虐待”。考虑到我们首席执行官的新产品列表广告网络,我有责任提出一个关于如何处理在Google购物渠道中使用的{信息/数据}的良好解决方案(称为PLA;产品列表广告)。

这就是问题
我们的产品不提供任何形式的验证(阅读:秉承网络的具体要求)和解放军基本上是完全围绕着由项目分类的数据的方式,完整性(每类别定义了必需/可选字段),每个字段可以或应该采用特定的格式(甚至可能取决于链接的类别;我还不知道:P)。

你猜,我们有点拧与当前的设置。这是不可能实施这些“严格”产品饲料。通过让我们的营销人员和自助服务客户创建数据并将数据发送给PLA,将意味着99%的时间能够解决问题。既然它只是一个小公司,我宁愿看看真正的问题。这意味着;试图创建一个可用于解放军营销活动的真实验证系统。

什么需要做

我一直在谈论我们的营销人员和客户知道用例是什么将是需求。这些都可以在下面的列表中的项目来概括:需要映射“categorisized”发送给谷歌PLA类别

  • 输入各种商品(见“链接”部分,以了解哪些类别可以映射到。
  • 验证需要是每“类别”每场的设置
  • 每个项目的每个字段需要分配的/映射到所选类别中定义一个字段。

附加侧信息

现在,我不想担心诸如“我们如何将”项目“链接到”类别“或”字段“到”类别字段定义“或类似的东西。这些“动态的东西”将由一个ECA规则体系来处理,该体系将在其他时间开发。 (为什么要问?系统正在按计划处理/处理数据,因此每个操作都需要定义和存储供以后使用),现在不必担心实现细节。另外,具体的具体实现通常通过使用动态属性(例如数据类型定义的字段上的属性等)来实现。 EAV系统现在也不是我的主要焦点。(如果您查看数据库设计,上面给出的用例将更有意义)。

我目前的设计

首先,让我使用的主要实体说明我的SQL结构:

  • schemas;一个定义“类别”的抽象方式,想象一个解放军类别
  • fields;字段定义(在schema中)
  • datatypes;一袋类型。 (主要用于给上述字段一些数据完整性)
  • valueConstraints;一包约束定义(不是实现!)。

现在。到目前为止,这一切都很好。下面是我有点担心的事情:

valueConstraints用一个N的方式绑定到数据类型:M表(datatype_valueConstraints),但几乎每一个用户所产生的数据类型正在由只可用valueconstraints的子集,有一个“价格”数据类型可以有一个“电子邮件”约束是没有意义的。但是,看到一个价格总是一个数字时,“最小”和“最大”约束是有意义的。为了清楚起见:datatype_valueConstraints对每个数据类型持有“可能的”valueConstraints

与primitiveType - > constraintValue关系发生同样的问题。基本上,一个数据类型必须包含一个“primitiveType”(在我的情况下是基本类型表的外键)。原始类型管理valueConstraints以供选择。 primitiveTypesvalueConstraints不被认为是用户生成的,所以它现在是夹具数据。

不明白吗?下面是一个例子的工作流程(为 “PLA /衣” 模式(部分)设置):

  • 添加数据类型 “图像”,设置{原始类型为TEXT}
    • 选择下列ValueConstraints使用(TEXT具体)
      • “URL”(确保它的HTTP | HTTPS或类似的东西,说不上来)
      • “的minLength”(确保它的存在)
      • “正则表达式”(允许某些图像extensio纳秒..或类似的东西)
  • 添加字段定义 “IMAGEURL”,设置{数据类型为 “图像”}
    • 数据类型特定的配置,即,在约束断言数据填充(EAV图案有关)。 “MinLength”= 14,“Regex”=“*(gif | jpg | png)”等等。

由于数据类型是原始“TEXT”的用户可以只从“TEXT” -concerning(和继承由于像数据类型化系统树)valueConstraints选择。

一旦数据类型正确设置,我们可以在模式中使用数据类型“image”作为模式中的多个字段(如果我们愿意的话)。例如; “PLA/CLOTHING”架构可能需要“附加图片”字段。通过重新使用“image”数据类型以及不同的约束配置,现在完全可以实现这一点。

显示关系(关于上面的文字墙脑波)一种视觉SQL表的布局:

我的DB模式:(点击放大)

TLDR;

请参阅“我目前的设计”并给我您的意见。我认为这可能过于复杂/没有经过深思熟虑并寻求改进。注意:我不是DBA,只是一名开发人员。 (另外,我不知道如果架构设计才有意义,如果你还没有读过 “问题域” 部分:P)

链接

我真的很期待看到你们的想法。提前致谢!

+0

我已编辑您的帖子嵌入图像,并修复了一些小事,请添加您想要的纯文本链接(直到你有10代表)我将再次编辑以添加它们。 –

+0

在这里,+ rep。 – Aeronth

+0

@ShadowWizard实际上有一个[bug](http://meta.stackexchange.com/q/103567/209357),可以防止他在添加图片后编辑帖子。但现在他有11个代表,这不再是一个问题。 – Antony

回答

1

只是个人喜好的问题:如果不是真的有必要,我不太喜欢表格中的父母关系。我看到他们的模式表,但在这种情况下,我觉得原始类型可以从更严格的模式中受益,删除BASIC类型并将长度的基本约束添加到基元的每个人(在空间方面没有这样的壮举和速度)。如果您确实需要额外增加 基本类型的级别,请执行此操作,但仅为一个父级别添加父表并将所有内容都符合此要求。

当然:它缺乏灵活性,但根据我的经验,更容易添加符合此模式的数据,而不需要更改代码以检索条件(且代码将是普通查询),而不需要无限级别的嵌套原始人,你不会使用或更糟糕的是:你会滥用:)