我对数据库逻辑比较陌生,正在尝试弄清楚多个表应该/不应该互相引用。
我有一个表“book”,应该有列:
| 'title' | 'genre' | 'author' | 'buyOption' | 'pubDate'
我希望每本书都有可能有一个或多个流派。
我希望每本书都有可能有一个或多个作者。
我希望每本书都有可能有一个或多个购买选项(“购买选项”)。
而且每本书的每个购买选项(亚马逊、沃尔玛等)都有一个唯一的url。
我认为有道理(请纠正我的错误):
__________________________
| |
| Book |
|________________________|
|Primary Key | book_id | //seems redundant (same as title_id)...would like to just use title_id, but idk if that's possible
|------------|-----------|
|Foreign Key | title_id | <--------------------------------------------|
|Foreign Key | bo_id | <----------------------------------| |
|Foreign Key | genre_id | <--------------------------| | |
|Foreign Key | author_id | <-------------------| | | |
| - - - - - | - - - - - | | | | |
| | pubDate | //publish date | | | |
|________________________| | | | |
| | | |
| | | |
| | | |
__________________________ | | | |
| | | | | |
| Authors | | | | |
|________________________| | | | |
|Primary Key | author_id |------------------| | | |
|------------|-----------| | | |
|--->|Foreign Key | title_id | | | |
| | - - - - - | - - - - - | | | |
| | | author | | | |
| |____________|___________| | | |
| | | |
| | | |
| __________________________ | | |
| | | | | |
| | Genres | | | |
| |________________________| | | |
| |Primary Key | genre_id |-------------------------| | |
| |------------|-----------| | |
|--->|Foreign Key | title_id | | |
| | - - - - - | - - - - - | | |
| | | genre | | |
| |____________|___________| | |
| | |
| __________________________ | |
| | | | |
| | Buy Options | | |
| |________________________| | |
| |Primary Key | bo_id |---------------------------------| |
| |------------|-----------| |
|--->|Foreign Key | title_id | |
| | - - - - - | - - - - - | |
| | | buyBrand | //(Walmart, Amazon, etc.) |
| | | buyUrl | //(ex: https://www.amzn.com/buyBook1) |
| |____________|___________| |
| |
| |
| |
| __________________________ |
| | | |
| | Title | |
| |________________________| |
|---------|Primary Key | title_id |--------------------------------------|
|------------|-----------|
| | title |
|____________|___________|
有标题表有意义吗?如果是这样,我可以使用它的主键来填充其他各种表吗,如图所示?
如果“buy options”表中的每本书都有一堆不同的选项和关联的url,那么是否可以直接从主“book”表中获取buybrand和buyurl?最后,我只想要一个巨大的表格,我可以从中获取细胞数据。现在,我正在尝试找出如何用我的数据填充表,以及为每一段数据填充哪些表。
(同样,我对数据库逻辑还不熟悉,所以如果我的措辞难以理解,我深表歉意)
1条答案
按热度按时间uklbhaso1#
你的设计不好看。你在描述书与流派、书与作者、书与选项之间的多对多关系。
在books表中存储对相关流派、作者和选项的引用不是正确的方法:每本书只能存储一个相关值(一个流派、一个作者、一个选项),而您需要很多。相反,对于这些关系中的每一个,您应该有一个单独的表,称为桥表,它引用这些关联。
另一方面,依赖于图书(比如书名)的信息应该存储在图书表中。
以下是书籍和体裁的一个例子:
现在,假设你想列出所有属于流派的书
'Sci-Fi'
; 你会去:应该为模式中的每个多对多关系实现相同的逻辑。