|
|
1
6
你可以改变你在设计中所认为的事实价值 …您的数据模型中的一个事实似乎可以表示为以下n元组:
下表结构应该支持您想要的数据模型,并且可以相对容易地索引和联接。您还可以创建一个仅透视事实值和事实类型的视图,以便创建以下透视图:
有趣的是,您可以认为这是将EAV模型完全应用于数据的逻辑扩展,并将单个电影(具有导演、导演、恶棍等的直观属性)分解为一个枢转结构,属性集中于信息源。 建议的数据模型的好处是:
数据模型的一些缺点是:
我将电影数据提高了一个级别以规范化结构,您可以将电影名称下推到moviefact结构中以保持一致性(因为对于某些电影,我可以想象,即使名称是您可能希望跟踪其源信息的内容)。
然后,您虚构的电影数据将如下所示:
|
|
|
2
1
有趣的场景。你可以通过把你的实体当作第一类对象来绕过EAV贫民区;让我们称之为事实。在这种情况下,你是非常正交的,因为每部电影都有完全相同的四个事实。您的EAV表可以是原始的/正确的表,然后您可以有一个外部进程来挖掘该表并将数据复制到适当规范化的表单(即第一个表)。通过这种方式,您可以获得所需的数据及其元数据,并且可以轻松地查询电影信息,精确到挖掘过程的运行频率。 我认为您肯定需要一些“数据库外”的力量来确保数据仍然有效,因为似乎没有任何数据库方法来维护常规表和EAV表之间的完整性。我猜,通过一系列复杂的触发器,您几乎可以完成任何事情,但是一个“得到”您的问题的人工管理员可能更容易处理。 |
|
|
3
1
这是另一个想法……请随意在其中打孔:)
我想的是电影桌上的栏目 能够 有不同的类型(在您的示例中,它们都是字符串/varchar,但也可以是数字或日期信息,也可以是源代码)。 但是,源数据的列类型可能不会随电影数据的列类型的函数而变化,因此您可以为源使用更多EAV系统,而不会丢失数据的完整性。 movierole表允许您显式枚举角色,以便在电影表的源和给定单元格之间创建可靠的链接。 -丹 |
|
|
4
1
由于您只有源数据的两个字段(source和reporter),因此我建议使用如下元数据表:
这将使不太重要的源数据远离主表,但查询不会变得复杂,代码的可读性也会更高。
我只是建议
|
|
|
5
0
我的回答可能有点过于哲学化了。容忍我。 我认为“源”列不是主题数据,而是元数据。它实际上是关于我们如何了解其他一些数据的数据。这使它成为关于数据的数据,这就是元数据。 EAV之所以会造成这样的问题,原因之一是它将数据和元数据混合在一行中。有时我自己也会故意这样做,作为一个中间步骤,我想要得到一个结果。但我从未尝试在我的可交付成果中混合数据和元数据。 我知道为什么我从来没有这样做过,但我不能简明扼要地解释。 |
|
|
6
0
因为没有人真正尝试过,我要回答我自己的问题。我很确定像EAV这样的桌子确实是唯一的出路。为了在每一列上存储元数据(在本例中是关于源和记者的),您实际上是将每一列本身作为一个实体来处理,EAV允许这样做。 你 能够 走其他路线,比如为每个原始列添加第二列和第三列来存储数据,但这肯定会破坏一些基本的规范化规则,并且可能只会导致以后的痛苦。 |
|
|
7
0
隐马尔可夫模型。。。。我没有用过这个,所以我不是根据经验(也就是说,如果它不起作用的话不要怪我),但从表面上看,您似乎可以存储“公共”数据,您知道这些数据将一直存在于正常表中,而“元数据”可能会更改为XML。接下来的问题是如何很好地查询它,我认为您可能能够按照描述的那样做。 HERE . |
|
|
8
0
另一个需要考虑的方法是类表继承。Bill Karwin在 this SO answer 以及很多好的背景。 |
|
|
9
0
我会根据我需要编码的内容做出决定。 如果src/journo只是附加信息,那么我将进入下一列。但是,如果我知道我将最终构建复杂的SRC/Journo查询,我将使用EAV,因为在元表中搜索记者的引用比在元表中搜索更容易。 首席女记者 和 恶棍记者 等。 就个人而言,我倾向于将src/journo元数据转储到另一个表EAV样式中,但使用fk定义属性定义表。拥有一个自由格式的属性文本字段是灾难的秘诀——总是通过一个约束来控制您的属性。如果需要,可以实现触发器来提高引用完整性。 对我来说,这就是我的观点。你是否认为新闻来源和记者本身就是关系问题,或者他们只是补充 电影 ?下一个改进级别将是为 电影电视剧 和 电影数据记者 它允许您将FK映射到定义有效的表 来源 和 记者 (关于这些消息来源/记者的进一步信息可以充实)。你在这里要做的是建立一个多对多的关系 电影 实体与 来源 (还有) 记者 实体。 |