2

我的问题似乎很简单,但不幸的是我找不到任何令人满意的答案。

请看下面的例子:

在此处输入图像描述

Author定义一个作者,Document至少有一个作者和表Authors组一个文档拥有的所有作者。

我的问题是:每次插入文档时,我都需要验证我的作者组是否已经存在于表 Authors 中。

做这个的最好方式是什么?我想首先我需要验证这个组是否已经存在,然后,我应该获取那个 id(如果已经存在)或生成一个新记录Authors(如果组不存在)。

问题:

这是应该在具有多对多多重性的表上发生的正确逻辑过程吗?

如何检查表 Authors 上是否已经存在一组值?

有这样的东西,select * from Authors where a_id IN(1,2,3)但以一种独特的方式。:S

任何帮助都会很棒。

谢谢

4

2 回答 2

1

我宁愿使用三个表的解决方案:

Author
Document
rel_author_document

并且rel_author_document将具有如下结构:

author_fk
document_fk

您无需添加新组,只需将作者与文档关联即可。

如果您需要类似的内容,rel_author_document您甚至可以添加其他列,例如。role

使用这种方法,您可以拥有具有同一组作者的两个文档,但这不会影响您的表现。

如果您的问题是关于家庭作业并且您不能更改表格结构,那么:

  1. 查询 Authors 表,查看 where 条件下是否有一组 Author 具有相同数量的 author_id,例如:

    select count(1) cnt from Authors where a_id IN(1,2,3)

  2. 如果cnt与s的个数不同author_id,则插入一个新组

  3. 如果cnt相等,则获取该组作者的 id:

      select ID 
        from Authors 
       where a_id = 1
          or a_id = 2
          or a_id = 3   
    group by 1
      having count(1) = 3
    
于 2015-11-16T14:48:21.590 回答
0

如果它是“多对多”关系,我相信您正在寻找的表结构是:

作者(a_id、姓名、出生日期、域)

文档(d_id、摘要、年份)

Auth_Doc (a_id, d_id)

在检查是否已经有一组作者方面,这取决于您如何显示数据。如果我正在上传一个文档并且我想检查一组作者是否存在,我会执行以下操作:

假设您的数据存储为:

a_id | 姓名

1 | 约翰、杰克、鲍勃

SELECT * FROM Author WHERE name like '%john%'

我希望这有帮助,

索海尔

于 2015-11-16T14:34:09.210 回答