mysql - 具有可变列数的 SQL 数据库

标签 mysql sql sql-server

我有一个关于我正在尝试创建的数据库的新手问题。我有一份出版物 list ,一般顺序如下:

UID、作者、URL、标题、出版物、起始页、结束页、卷、年

然后我意识到有多个作者,我开始尝试为多个作者规范化数据库。然后我意识到作者的顺序很重要,一篇期刊文章也可以有很多作者,从 1 到几十,甚至更多。

我应该只创建一个包含多个作者(空列)(例如 12 或其他)的表吗?或者有没有一种方法可以根据作者的数量来设置可变数量的列?

最佳答案

数据库模型

您基本上需要作者和出版物之间的多对多关系,因为一位作者可以撰写多篇出版物,而一篇出版物可以由不止一位作者撰写。

这要求您有 3 个表。

  • 作者 - 关于每个作者的一般信息(没有 publications_id)
  • 出版物 - 关于每个出版物的一般信息(没有 author_id)
  • AuthorPublication - 列 author_idpublication_id 是对表 AuthorPublication 的引用。

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

附加说明

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

出现顺序

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

关于mysql - 具有可变列数的 SQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34568563/

相关文章:

mysql - 使用 SQL 计算访问次数,除了来自 2 个最大访问者的访问次数

php - MySQL SQL语法错误;查看与您的 MySQL 服务器版本相对应的手册,了解要使用的正确语法

MySQL 将行转为动态数量的列

mysql - 数据库表结构

SQL 查询返回具有空字段的前 n 条记录或按该字段分组的记录

sql-server - 部署Grails应用程序时出现的问题

mysql - 根据条件执行多个左连接并获取非空列值

c# - 删除 SQL 数据库中不存在的图像

sql-server - SQL Server/SQL Azure 架构比较

javascript - 多个条件到一个复选框