Sql 当许多列可能有重复数据时,如何消除冗余?
我正在研究一个图书馆系统。我有一个图书表,其中有12列,包括作者、标题、出版物等。在这12列中,有2列图书id和isbn是唯一的。当一个图书馆得到同一本书的n份拷贝时,唯一唯一的列是book_id和isbn。所有其他列将重复n次。这是个糟糕的设计吗。有没有办法消除这种冗余?我想创建另一个表,在那里我可以唯一地存储所有冗余列,并将book_id和isbn分开。我应该这样做,还是这张桌子就这么好?我想你应该用两张不同的桌子 在一个表中,您可以存储唯一的键,如book_id、isbn_id。在另一个表中,您可以使用这些book_id或isbn_id中的一个作为参考外键。或者,您也可以在第一个表中创建一个自动递增id,用于对第二个表的外键引用 在第二个表中,您可以保留第一个表中的所有其他10列+1列供参考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。在另一个表
这将帮助您保持冗余,并且如果将来您想扩展数据库表,第一个表也可以用于映射。我认为您应该使用两个不同的表 在一个表中,您可以存储唯一的键,如book_id、isbn_id。在另一个表中,您可以使用这些book_id或isbn_id中的一个作为参考外键。或者,您也可以在第一个表中创建一个自动递增id,用于对第二个表的外键引用 在第二个表中,您可以保留第一个表中的所有其他10列+1列供参考
这将有助于您保持冗余,并且如果将来要扩展数据库表,第一个表也可以用于映射。您所描述的内容听起来像两个不同的表:
定义书籍属性的书籍
,定义传入副本的属性复制
副本
的属性可能包括(除了对书籍
的外键引用之外)
- 状况
- 获得日
- 来源
- 有关收购的其他信息
它也可能已经“处理”了日期。或者,您可以在一个
复制\u事务
某种表中维护它。您所描述的内容听起来像两个不同的表:
定义书籍属性的书籍
,定义传入副本的属性复制
副本
的属性可能包括(除了对书籍
的外键引用之外)
- 状况
- 获得日
- 来源
- 有关收购的其他信息
copies\u transactions
表中维护它