我目前处于开发产品新部分的数据库设计阶段。为此我需要有一个“完整性检查”或一些建议,因为我对设置的某些部分不感到过于自信。关于(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
以供选择。 primitiveTypes
和valueConstraints
不被认为是用户生成的,所以它现在是夹具数据。
不明白吗?下面是一个例子的工作流程(为 “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)
链接
我真的很期待看到你们的想法。提前致谢!
我已编辑您的帖子嵌入图像,并修复了一些小事,请添加您想要的纯文本链接(直到你有10代表)我将再次编辑以添加它们。 –
在这里,+ rep。 – Aeronth
@ShadowWizard实际上有一个[bug](http://meta.stackexchange.com/q/103567/209357),可以防止他在添加图片后编辑帖子。但现在他有11个代表,这不再是一个问题。 – Antony