如何将N数据库表与一个主表绑定?

noi*_*isy 4 sql database database-design relational-database

让我们假设我有N个书店用于N书店.我必须在每个书店的单独表中保存有关书籍的数据,因为每个表都有不同的方案(列的数量和类型不同),但是所有Bookstores表都有相同的列集;

现在我想创建一个只有几列的"MasterTable".

|   MasterTable   |
|id. | title| isbn|     
| 1  | abc  | 123 |


| MasterToBookstores |
|m_id | tb_id | p_id |
| 1   |   1   |  2   |
| 1   |   2   |  1   |


|       BookStore_Foo          |
|p_id| title| isbn| date | size|     
| 1  | xyz  | 456 | 1998 | 3KB |
| 2  | abc  | 123 | 2003 | 4KB |

|       BookStore_Bar                  |
|p_id| title| isbn| publisher | Format |     
| 1  | abc  | 123 |   H&K     |   PDF  |
| 2  | mnh  | 986 |   Amazon  |   MOBI |
Run Code Online (Sandbox Code Playgroud)

我的问题是,以这种方式保存数据是否正确?关于这个和类似案例的最佳做法是什么?我可以给特定的Bookstore表一个带数字的别名,这有助于我管理整套表吗?

有没有更好的方法来做这样的事情?

Bra*_*vic 5

我认为你混淆了"商店"和"书"的概念.

从你的评论和示例数据来看,问题在于书籍而不是商店具有不同的属性集.如果是这样,你需要一个与此类似的结构:

在此输入图像描述

符号: 在此输入图像描述表示继承1.BOOK是"基类",BOOK1/BOOK2/BOOK3是各种"子类" 2.当实体共享一组属性或关系3时,这是一种常见的策略.有关此概念的更全面解释,请在" ERwin方法指南 "中搜索"子类型关系" .

遗憾的是,当前关系数据库并不直接支持继承,因此您需要将此层次结构转换为普通表.这样做通常有3种策略,如这些帖子所述:

注意:上述结构允许在同一书店内混合各种书籍类型.让我知道这是不可取的(即你在任何给定的书店里只需要一种类型的书籍)......


1阿卡.类别,子类化,子类型,泛化层次等

2即书籍类型,取决于它们所需的属性.

3在这种情况下,所有类型的书籍都与商店存在多对多的关系.