Sql 当许多列可能有重复数据时,如何消除冗余?

Sql 当许多列可能有重复数据时,如何消除冗余?,sql,database,entity-relationship,Sql,Database,Entity Relationship,我正在研究一个图书馆系统。我有一个图书表,其中有12列,包括作者、标题、出版物等。在这12列中,有2列图书id和isbn是唯一的。当一个图书馆得到同一本书的n份拷贝时,唯一唯一的列是book_id和isbn。所有其他列将重复n次。这是个糟糕的设计吗。有没有办法消除这种冗余?我想创建另一个表,在那里我可以唯一地存储所有冗余列,并将book_id和isbn分开。我应该这样做,还是这张桌子就这么好?我想你应该用两张不同的桌子 在一个表中,您可以存储唯一的键,如book_id、isbn_id。在另一个表

我正在研究一个图书馆系统。我有一个图书表,其中有12列,包括作者、标题、出版物等。在这12列中,有2列图书id和isbn是唯一的。当一个图书馆得到同一本书的n份拷贝时,唯一唯一的列是book_id和isbn。所有其他列将重复n次。这是个糟糕的设计吗。有没有办法消除这种冗余?我想创建另一个表,在那里我可以唯一地存储所有冗余列,并将book_id和isbn分开。我应该这样做,还是这张桌子就这么好?

我想你应该用两张不同的桌子

在一个表中,您可以存储唯一的键,如book_id、isbn_id。在另一个表中,您可以使用这些book_id或isbn_id中的一个作为参考外键。或者,您也可以在第一个表中创建一个自动递增id,用于对第二个表的外键引用

在第二个表中,您可以保留第一个表中的所有其他10列+1列供参考


这将帮助您保持冗余,并且如果将来您想扩展数据库表,第一个表也可以用于映射。

我认为您应该使用两个不同的表

在一个表中,您可以存储唯一的键,如book_id、isbn_id。在另一个表中,您可以使用这些book_id或isbn_id中的一个作为参考外键。或者,您也可以在第一个表中创建一个自动递增id,用于对第二个表的外键引用

在第二个表中,您可以保留第一个表中的所有其他10列+1列供参考


这将有助于您保持冗余,并且如果将来要扩展数据库表,第一个表也可以用于映射。

您所描述的内容听起来像两个不同的表:

  • 书籍
    定义书籍属性的
  • 复制
    ,定义传入副本的属性
你似乎理解书的属性

副本
的属性可能包括(除了对
书籍
的外键引用之外)

  • 状况
  • 获得日
  • 来源
  • 有关收购的其他信息

它也可能已经“处理”了日期。或者,您可以在一个
复制\u事务
某种表中维护它。

您所描述的内容听起来像两个不同的表:

  • 书籍
    定义书籍属性的
  • 复制
    ,定义传入副本的属性
你似乎理解书的属性

副本
的属性可能包括(除了对
书籍
的外键引用之外)

  • 状况
  • 获得日
  • 来源
  • 有关收购的其他信息
它也可能已经“处理”了日期。或者您可以在某种类型的
copies\u transactions
表中维护它