当前位置: 首页 > 面试题库 >

SQL数据库具有可变的列数

麻宜春
2023-03-14
问题内容

我有一个关于我要创建的数据库的新手问题。我有一份出版物列表,其顺序如下:

UID,作者,URL,标题,出版物,起始页,结束页,数量,年份

然后我意识到有多个作者,因此我开始尝试规范化多个作者的数据库。然后我意识到作者的顺序很重要,而且期刊文章中也可能有许多作者,人数在1到数十名之间,甚至可能更多。

我应该只创建一个包含多个Authors(空列)的表(如12或类似的东西)吗?还是有一种方法可以根据作者数量来改变列数?


问题答案:

数据库模型

基本上,您需要many-to-many作者与出版物之间的关系,因为一个作者可以撰写许多出版物,而一个出版物可以由多个作者撰写。

这需要您有3张桌子。

  • 作者-有关每位作者的一般信息(无publications_id)
  • 发布-有关每个发布的一般信息(无author_id)
  • AuthorPublication -列author_idpublication_id那些对表的引用AuthorPublication

这样,您就不会将特定作者绑定到出版物,但是您可以拥有更多的作者,反之亦然。

附加条款

如果您想区分作者在特定出版物中的角色,则还可以添加一些列,例如id_role对字典表的引用,该表说明了作者的所有可能角色。这样,您可以在主要作者,合著者等之间有所不同。这样,您还可以存储有关处理本书翻译的人员的信息,但是也许您应该将其命名更改为Author不太具体的名称。

出现顺序

您可以通过添加一列来确保作者的正确排序,在AuthorPublication该列中您将为每一个单独增加Publication。这样,您将能够保留所需的顺序。



 类似资料:
  • 如何用初始值初始化可变实时数据?我正在寻找类似的东西: < code>val text = MutableLiveData

  • 我试图读取一个csv文件,并将其设置为转换为另一种格式,以节省一些工作时间,但当一行的长度小于预期列时,我正在加载它的JTable会引发异常。如果行长度<列长度,是否有方法创建空单元格? 因此,您可以看到getValueAt(int row,int col)方法,如果col超过String[].length将导致错误。

  • JOOQ似乎完全忽略了数据库列的默认值。既不会更新ActiveRecord对象,也不会在插入时跳过此列。相反,它尝试将其设置为NULL,这在非NULL列上失败。 例: 我所期望的行为是,要么new记录()用korrekt值初始化所有默认变量(尽管我知道如果结果是自定义函数的结果,这可能很困难:-))。或者INSERT INTO不插入所有带有默认值的未修改列,然后INSERT INTO后面跟着一个S

  • 问题内容: 我一直在阅读一些有关SQL注入的信息,我想确保我的代码可以说“安全”,我打算使用RegExp验证程序来检查用户输入,但是这里的另一篇文章建议仅使用参数化查询,我正在使用它们,但我想确保我的代码是安全的,对吗? 我将最后一部分剪短,使文章更短,其余的只是尝试并捕获异常并关闭数据库连接,以及提供有关插入成功的用户反馈。 问题答案: 您的代码很好,可以防止注入,因为值是作为参数而不是字符串文

  • 问题内容: 我有一个由数据库支持的小应用程序(SQLite,但与问题无关)。我已经定义了一些类型,例如: 这些类型映射到数据库中的表。当我读取数据时,我最终会写出这样的函数: (为了清楚起见,我省略了处理错误。) 编写这样的函数确实很烦人,感觉就像创建了很多样板。有没有更惯用的方法将一组SqlValues转换为Haskell数据? 问题答案: 库中似乎没有任何标准方法可用于此目的。如果您感觉特别敏

  • 问题内容: 我正在使用带有SQL数据库的C#开发应用程序。 我有一个模型: 我想将其表示为表格。 表格的哪些正确字段? 问题答案: 这取决于该人与他将负责的其他人之间存在什么样的关系。 如果是父母与子女的关系,即 组成 关系,则可以使用自我参考表。就像是: 包含以下各列: , 。 相同表的外键。 如果一个人与其他人之间的关系是一个 集合 ,并且一个人可能对其他许多事情负责: , 。 : , , 。