有关(overcomplex?)架构的SQL架构建议

时间:2013-06-04 11:50:30

标签: sql schema

我目前正处于开发我们产品新部分的数据库设计阶段。为此,我需要进行健康检查"或者一些建议,因为我对设置的某些部分没有过多的信心。

一些背景信息

我们正在开发的产品是一种所谓的营销ROI最大化系统"。它处理大数据和处理/增强/丰富大量信息,然后将其发送到不同的营销渠道。简而言之,这基本上就是它的作用。

问题域

系统目前还没有完全具备良好的数据验证功能,并且正在被滥用"每天由"营销"人和我们称之为"自助服务"顾客。考虑到我们的首席执行官的新谷歌产品列表广告网络,我的任务是提出一个很好的解决方案,如何处理在谷歌的购物渠道中使用的{信息/数据}(称之为PLA;产品列表)广告)。

这是问题
我们的产品不提供任何形式的验证(阅读:遵守网络特定要求),PLA基本上完全围绕数据完整性通过项目分类(每个类别定义了必需/可选字段)和每个字段可以或应该采用特定的格式(甚至可能取决于相关的类别;我还不知道:P)。

你猜它,我们对当前的设置有点紧张。它是不可能强制执行这些"严格的"产品饲料。让我们的营销人员和自助服务客户创建并向PLA发送数据将意味着在99%的时间内解决问题/解决问题。而且由于它只是一家小公司,我宁愿看看真正的问题。那意味着;试图创建一个可用于PLA营销活动的真实验证系统。

需要做什么

我一直在与营销人员和客户交谈,了解用例是什么以及需求是什么。这些可以在以下列表项中总结:

  • 输入Feed中的每个项目都需要映射"已分类"到Google PLA类别(请参阅"链接"部分以查看可以映射到哪些类别。
  • 需要根据"类别"
  • 按字段设置验证
  • 每个项目的每个字段都需要分配/映射到所选类别中定义的字段。

附加信息

现在,我不想担心像"我们将如何联系" item"到"类别"或"字段"到"类别字段定义"或类似的东西。这些动态的东西"将由ECA规则系统处理,该系统将在其他时间开发。 (为什么你问?系统是否按计划处理/处理数据,因此需要定义和存储每个操作以供以后使用),现在不用担心实现细节。

此外,具体的具体实现通常通过使用动态属性来实现(例如,由数据类型定义的字段上的属性等)。 EAV系统现在也不是我的主要关注点。 (如果你看看数据库设计,上面给出的用例会更有意义)。

我目前的设计

首先,让我用主要实体来解释我的SQL结构:

  • schemas;一种定义"类别"的抽象方式,考虑PLA类别
  • fields;字段定义(在schema
  • datatypes;一袋类型。 (主要用于为上述字段提供一些数据完整性)
  • valueConstraints;一袋约束定义(不是实现!)。

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

valueConstraints通过N:M表(datatype_valueConstraints)绑定到数据类型,但几乎每个用户生成的数据类型都只由可用值约束的子集组成,它不会&# 39;有价值的" Price"数据类型,可以有一个"电子邮件"约束..但是,有一个" Min"和" Max"看到价格的约束始终是一个数字。为清楚起见:datatype_valueConstraints持有"可能"每个数据类型valueConstraints

与primitiveType相同的问题 - > constraintValue关系。基本上,数据类型必须包含" primitiveType" (在我的例子中是原始类型表的外键)。基元类型管理要从中选择的valueConstraintsprimitiveTypesvalueConstraints不被视为用户生成,因此它现在是固定数据。

不明白吗?这是" PLA /服装"架构的示例工作流程((部分)设置):

  • 添加数据类型" image&#34 ;,将{primitive type设置为TEXT}
    • 选择要使用的ValueConstraints(特定于TEXT)
      • " URL" (确保它的http | https或类似的东西,dunno)
      • "&MINLENGTH#34; (确保它在那里)
      • "正则表达式" (允许某些图片扩展..或类似的东西)
  • 添加字段定义" imageURL",将{datatype设置为" image"}
    • 数据类型特定配置,即填充约束断言数据(与EAV模式相关)。 "&MINLENGTH#34; = 14,"正则表达式" =" *(gif | jpg | png)"等等。

因为数据类型是原始的" TEXT"用户只能选择" TEXT" -concerning(并且由于树状数据类型系统而继承)valueConstraints

正确设置数据类型后,我们可以使用数据类型" image"对于模式中的多个字段(如果我们想要的话)。例如; a" PLA / CLOTHING"架构可能需要一个额外的图像"领域。现在,通过重复使用"图像"数据类型可能有不同的约束配置。

显示关系的可视化SQL表布局(关于上面文本墙的脑波):

我的数据库架构:(点击放大)

TLDR;

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

的链接

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

1 个答案:

答案 0 :(得分:1)

只是个人偏好的问题:如果不是真的有必要,我不会过分喜欢桌子内的父母关系。我看到它们用于模式表,但在这种情况下,我觉得原始类型可以从更严格的模式中受益,删除BASIC类型并将长度的基本约束添加到每个基元(在空间方面没有这样的壮举)和速度)。如果你真的需要提高水平 原始类型:执行此操作,但仅为一个父级别添加父表,并使所有内容符合此要求。

当然:它缺乏灵活性但是根据我的经验,更容易添加符合此模式的数据,而不需要更改代码来检索条件(并且代码将是一个简单的查询),而不是允许无限级别的嵌套原语你不会使用或更糟:你会虐待:)