当很多列可以有重复数据时如何去除冗余?
How to remove redundancy when a lot of columns can have repeating data?
我正在研究图书馆系统。我有一本书 table,其中有 12 列,包括作者、标题、出版物等。在这 12 列中,有 2 列 book_id 和 isbn 是唯一的。当图书馆获得同一本书的 n 份副本时,唯一将唯一的列是 book_id 和 isbn。所有其他列将重复 n 次。这是一个糟糕的设计吗?有没有办法消除这种冗余?我想创建另一个 table ,我可以在其中唯一存储所有缩减列,并将 book_id 和 isbn 分开。我应该这样做还是 table 就这样好了?
我认为你应该使用两个不同的 tables。
在一个 table 中,您可以存储唯一键,例如 book_id、isbn_id。在另一个 table 中,您可以使用其中一个 book_id 或 isbn_id 作为参考外键。或者其他方法是您也可以在第一个 table 中创建一个自动递增 ID,用于对第二个 table.
的外键引用
在第二个 table 中,您可以保留所有其他 10 列 + 1 列以供从第一个 table 开始参考。
这将帮助您保持冗余,如果将来您想要扩展数据库 table,第一个 table 也可用于映射。
您所描述的听起来像是两种不同的 table:
books
定义一本书的属性。
copies
定义传入副本的属性。
你好像很了解书籍的属性
copies
的属性可能包括(除了对 books
的外键引用)
- 条件
- acquired_date
- 来源
- 有关收购的其他信息
它也可能有“处置”日期。或者您可以在某种 copies_transactions
table 中维护它。
我正在研究图书馆系统。我有一本书 table,其中有 12 列,包括作者、标题、出版物等。在这 12 列中,有 2 列 book_id 和 isbn 是唯一的。当图书馆获得同一本书的 n 份副本时,唯一将唯一的列是 book_id 和 isbn。所有其他列将重复 n 次。这是一个糟糕的设计吗?有没有办法消除这种冗余?我想创建另一个 table ,我可以在其中唯一存储所有缩减列,并将 book_id 和 isbn 分开。我应该这样做还是 table 就这样好了?
我认为你应该使用两个不同的 tables。
在一个 table 中,您可以存储唯一键,例如 book_id、isbn_id。在另一个 table 中,您可以使用其中一个 book_id 或 isbn_id 作为参考外键。或者其他方法是您也可以在第一个 table 中创建一个自动递增 ID,用于对第二个 table.
的外键引用在第二个 table 中,您可以保留所有其他 10 列 + 1 列以供从第一个 table 开始参考。
这将帮助您保持冗余,如果将来您想要扩展数据库 table,第一个 table 也可用于映射。
您所描述的听起来像是两种不同的 table:
books
定义一本书的属性。copies
定义传入副本的属性。
你好像很了解书籍的属性
copies
的属性可能包括(除了对 books
的外键引用)
- 条件
- acquired_date
- 来源
- 有关收购的其他信息
它也可能有“处置”日期。或者您可以在某种 copies_transactions
table 中维护它。