对于此示例,我试图构建一个系统,使多个来源的输出,但这些来源不尚未构建。"模块"的输出将是一个组件,并且每个源将自己要生成和以后扩展的组件。

这里是我在 MySQLWorkbench 设计的一个示例︰table layout

目标是使我正在轻松地扩展在以后建立更多的源时显示的输出表中数据的输出模块。我还希望添加新的源时,架构更新最小化。目前,我将需要添加一个新表,每个源,然后添加到输出表的外键。

有更好的方法来执行此操作吗?我不知道如何我感觉有关这些能空外键联接查询将因为包含 IFNULL 的和将快速不规范。

想法吗?

编辑 1︰ 说明

我将显示在输出表中使用数据网格。输出表将包含常规数据网格中的所有项,并基本上将作为 output_source_X 表的聚合函数︰

output(id, when_added, is_approved, when_approved, sort_order, ...)

Output_source_X 表将包含特定于源的其他数据。例如,假设输出源表之一是 Facebook 帖子,所以该表将包含特定于 Facebook API 列︰

output_source_facebook(id, from, message, place, updated_time, ...)

另一个可能是 Twitter,因此特定于 Twitter 所列︰

output_source_twitter(id, coordinates, favorited, truncated, text, ...)

第三个输出源表格可能 Instagram,因此 output_source_instagram 表中将包含特定于 Instagram 的列。

将一对一与输出表和一个 output_source_X 表的外键关系,具体取决于输出项的是 Facebook、 Twitter,Instagram 等...开机自检,因此可以为 NULL 的外键。

output table
------------
foreign key (source_id_facebook) references output_source_facebook(id)
foreign key (source_id_twitter) references output_source_twitter(id)
foreign key (source_id_instagram) references output_source_instagram(id)

我猜我的问题是,这不是我想是因为我想以及添加其他源,而无需更新架构更模块化。目前,这要求我加入 output_source_X 上使用任何外键不 null 输出表。

2014-12-31 00:00:00
问题评论:

任何人?会碰撞这再次既然是新年 !

回答:

在此设计中几种方法几乎可以肯定坏。

它的不清除您的设计所表示的但简单的一个是类似于︰

// source [id] has ...
source(id,message,...)
// output [id] is approved when [approved]=1 and ...
output(id,approved,...)
// output [output_id] has [source_id] as a source
output_source(output_id,source_id)
foreign key (source_id) references source(id)
foreign key (source_id) references source(id)

也许有不同的子类型的结果和/或源?根据源和/或输出?也许每个源仅限于特定的输出送纸吗?"输出"和"源"的输出和源,以及这实际上是不在输出指明其出处的信息,但在何种输出源配对是 permittted 的信息?

请给我们您希望您的应用程序有关的基本语句的列名称由参数化语句。即对于在应用程序关系都感的英寸 (像上面的代码注释的 Eg)。(无法做到 diagrammed 设计的但可能是过于复杂和反射不真正想建立模型。)

是您的编辑︰

将一对一与输出表和一个 output_source_X 表的外键关系,具体取决于输出项的是 Facebook、 Twitter,Instagram 等...开机自检,因此可以为 NULL 的外键。

有一种超类型的多个不连续的子类型的情况。

您的情况很多如一样,这个问题在于其具有子类型/标记鉴别器列指示哪些子类型表有其中的非空一个表示子表的列的集合。请参阅 %2 Smout 和我解答。该应答.

请向我们提供您希望您的应用程序有关的基本语句的列名称由参数化语句

并且您将发现 (如上所述) 的简单语句。和语句使您当前的设计如果您会发现这些复杂。请参阅此。

我猜我的问题是,这不是我想是因为我想以及添加其他源,而无需更新架构更模块化。

您的结构不降低与适当的子类型设计的架构更改。

不管怎样,DDL 是存在的。您可以 genericize 子类型以避免 DDL 只能由 DBMS 管理完整性的损失。相关或合理,基于评估 DDL vs DML 性能折衷。重新搜索 (通常情况下,反模式) EAV。

(后您所示创建和删除新表是不可行及相应的可怕完整性-和并发性的质询万像素加入 table-and-metadata-encoded-in-table EAV 信息等效设计是可行的您应该考虑使用 EAV。)

我非常感谢你抽出时间来处理我的问题。我已编辑的我认为将回答您的问题与我原来的问题。谢谢。

做很多的过程,但我认为您 EAV 有关的建议可能是可行。我用过类似的模式之前 (我只是不知道它被调用的),但从未想到此处运用它。无论如何,感谢您使用额外的资源。

请输入您的翻译

MySQL, how to restructure optional multiple foreign keys

确认取消