关于(overcomplex?)模式的SQL体系结构建议

关于(overcomplex?)模式的SQL体系结构建议,sql,schema,Sql,Schema,我目前处于数据库设计阶段,正在开发我们产品的一个新部分。对此,我需要进行“理智检查”或一些建议,因为我对设置的某些部分不太自信 一点背景信息 我们正在开发的产品是所谓的“营销ROI最大化系统”。它处理大数据并处理/增强/丰富大量信息,然后再将其发送到不同的营销渠道。简而言之,这就是它的基本功能 问题域 该系统目前还没有完全具备良好的数据验证功能,每天都被“营销”人员和我们称之为“自助服务”的客户“滥用”。我们的首席执行官考虑到了新的谷歌产品列表广告网络,我的任务是提出一个关于如何处理{信息/数据

我目前处于数据库设计阶段,正在开发我们产品的一个新部分。对此,我需要进行“理智检查”或一些建议,因为我对设置的某些部分不太自信

一点背景信息 我们正在开发的产品是所谓的“营销ROI最大化系统”。它处理大数据并处理/增强/丰富大量信息,然后再将其发送到不同的营销渠道。简而言之,这就是它的基本功能

问题域 该系统目前还没有完全具备良好的数据验证功能,每天都被“营销”人员和我们称之为“自助服务”的客户“滥用”。我们的首席执行官考虑到了新的谷歌产品列表广告网络,我的任务是提出一个关于如何处理{信息/数据}用于谷歌购物频道的好解决方案(称之为PLA;产品列表广告)

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

你猜对了,我们现在的设置有点搞砸了。只是不可能执行这些“严格的”产品反馈。通过让我们的营销人员和自助服务客户创建数据并将数据发送给PLA,意味着99%的时间都在寻找错误/解决问题。由于它只是一家小公司,我更愿意研究真正的问题。这意味着,尝试创建一个真正的验证系统,用于PLA营销活动

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

  • 输入提要中的每个项目都需要映射到“Categorized”到google PLA类别(请参阅“链接”部分以查看可以映射到哪些类别)
  • 需要按照“类别”的每个字段设置验证
  • 每个项目的每个字段都需要分配/映射到选定类别中定义的字段
附加侧信息 现在,我不想担心诸如“我们如何将“项目”链接到“类别”或“字段”链接到“类别字段定义”之类的事情。这些“动态事件”将由ECA规则系统处理,该系统将在其他时间开发。(为什么要问?系统正在按计划处理/处理数据,因此每个操作都需要定义和存储以供以后使用),现在不必担心实施细节

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

我目前的设计 首先,让我使用主要实体解释我的SQL结构:

  • 模式
    ;一种定义“类别”的抽象方式,想想PLA类别
  • 字段
    ;字段定义(在
    架构中
  • 数据类型
    ;一包类型。(主要用于给上述字段提供一些数据完整性)
  • valueConstraints
    ;一包约束定义(不是实现!)
现在。到目前为止一切都很好。我有点担心的是:

valueConstraints
通过一个N:M表(
datatype\u valueConstraints
)绑定到一个数据类型,但是几乎每个用户生成的数据类型都只由可用的valueConstraints的一个子集组成,拥有一个可以包含“Email”的“Price”数据类型是没有意义的“约束..但是,有一个“最小”和“最大”约束是有意义的,因为价格总是一个数字。为了清楚起见:
datatype\u valueConstraints
保留了每个数据类型的“可能的”
valueConstraints

primitiveType->constraintValue关系也会出现同样的问题。基本上,数据类型必须包含“primitiveType”(在我的例子中是primitiveType表的外键).基本类型管理要从中选择的
值约束
基本类型
值约束
不被认为是用户生成的,因此它现在是夹具数据

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

  • 添加数据类型“image”,将{primitive type设置为TEXT}
    • 选择以下要使用的
      ValueConstraints
      (特定于文本)
      • “URL”(确保它是http | https或类似的东西,dunno)
      • “MinLength”(确保它在那里)
      • “Regex”(允许某些图像扩展..或类似的内容)
  • 添加字段定义“imageURL”,将{datatype设置为“image”}
    • 特定于数据类型的配置,即填充约束断言数据(与EAV模式相关)。“MinLength”=14,“Regex”=“*(gif | jpg | png)”等等
由于数据类型为原始“文本”,用户只能从“文本”中选择(由于树状数据类型系统而继承)
valueConstraints

正确设置数据类型后,我们可以对模式中的多个字段使用数据类型“image”(如果我们愿意)。例如,“PLA/CLOTHING”模式可能需要一个“附加图像”字段。现在,通过使用可能具有不同约束配置的“image”数据类型,这是完全可能的

显示关系的可视化SQL表布局(关于abov的脑波)