Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Access数据库规范化_Mysql_Sql_Ms Access_Database Design_Normalization - Fatal编程技术网

Mysql Access数据库规范化

Mysql Access数据库规范化,mysql,sql,ms-access,database-design,normalization,Mysql,Sql,Ms Access,Database Design,Normalization,我目前正在努力规范化现有数据库。我的问题与本视频中5分钟左右的问题相似 他说不要为有两位作者的书设置两个专栏,这是我的数据库存在的问题。我想知道查询是否可以修改表,使其只有一个author列,每个author都有单独的行 因此: 1[书名][isbn][author1][author2] 应该是: 1[书名][isbn][author1] 2[书名][isbn][author2]我不认为你在这里描述的是规范化。在规范化数据库中,您将 Table1 - bookId, title, isbn,

我目前正在努力规范化现有数据库。我的问题与本视频中5分钟左右的问题相似

他说不要为有两位作者的书设置两个专栏,这是我的数据库存在的问题。我想知道查询是否可以修改表,使其只有一个author列,每个author都有单独的行

因此:

1[书名][isbn][author1][author2]

应该是:

1[书名][isbn][author1]


2[书名][isbn][author2]

我不认为你在这里描述的是规范化。在规范化数据库中,您将

Table1 -  bookId, title, isbn, authorId
Table2 -  authorId, Name...
Table3 -  book_authorId, bookId, authorId <-- assign authors to book
但是对于你的具体问题,你描述的方式,这里是你能做的。首先,创建第二条记录:

Insert into <table> (title, isbn, author#1) 
     Select title, isbn, author#2 from <table> where not author#2 is null
这里描述了它

现在,您可以删除author2列


这些操作应该创建您在问题中描述的内容

我认为,由于关系是M:N,因此应该有一个图书作者关系的交集表:

书桌

bookId (PK)   | bookTitle     | isbn | etc...
作者表

authorId (PK) | authorName    | etc...
交集表

bookId (PK)   | authorId (PK) | etc...
在数据库方面,这是最正确的方法


如果您对作为实体的作者不感兴趣,可以跳过“作者”表,在交叉表中用authorName替换authord。

同一本书有两行真的是更好的解决方案吗?似乎作者应该在这里有自己的表格。被否决的人这样做是正确的,因为我确实没有键入多对多分配表格。现在已经修好了