SQL多重性多次插入过程

时间:2015-11-16 13:10:26

标签: sql data-modeling multiplicity

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

请查看以下示例:

enter image description here

表格Author定义作者,Document至少有一位作者和表格Authors对文档所有作者进行分组。

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

最好的方法是什么? 我想首先我需要验证这个组是否已经存在然后,我应该获得该id(如果已经存在)或者在Authors上生成新记录(如果组不存在)。 / p>

问题:

这是否应该在具有多对多的表的情况下发生的正确逻辑过程?

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

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

任何帮助都会很棒。

由于

2 个答案:

答案 0 :(得分:1)

我宁愿选择三个表格的解决方案:

Author
Document
rel_author_document

rel_author_document的结构如下:

author_fk
document_fk

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

rel_author_document中,您甚至可以添加其他列,例如role,如果您需要这样的话。

通过这种方法,你可以拥有两个同一组作者的文件,但这不会杀死你的表演。

如果你的问题是家庭作业,你就不能改变表格结构:

  1. 查询作者表以查看您在where条件中是否有一组具有相同编号的author_id的作者,如:

    选择count(1)cnt   来自作者  其中a_id IN(1,2,3)

  2. 如果cntauthor_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
    

答案 1 :(得分:0)

如果是"多对多"关系我相信你正在寻找的表结构是:

作者( 援助, 名称, 生日, 域)

文件( D_ID, 抽象, 年)

Auth_Doc( 援助, D_ID )

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

假设您的数据存储为:

a_id |名称

1 |约翰,杰克,鲍勃

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

我希望这有帮助,

苏海尔