我对数据库逻辑还比较陌生,正在尝试弄清楚应该/不应该相互引用多个表。
我有一个表'Book',应该有列:
| '标题'| '流派'| '作者'| 'buyOption'| 'pubDate'
我认为有道理(请在错误之处纠正我):
__________________________
| |
| 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 |
|____________|___________|
(...花了一段时间才大声笑)
拥有标题表是否有意义?如果是这样,我可以使用它的主键来填充其他各种表,如图所示吗?
如果“购买选项”表将为每本书提供一堆不同的选项和相关的url,是否可以直接从主“书籍”表中获取buyBrand和buyUrl?最后,我只想要一个可以从中获取单元格数据的巨型表。现在,我正在尝试弄清楚如何用我的数据填充表,以及为每个数据填充哪些表。
(再次,我是数据库逻辑的新手,因此,如果我的措辞难以理解,我深表歉意)
您的设计看起来不太好。您正在描述书籍和流派,书籍和作者,书籍和选项之间的多对多关系。
在书中存储对相关体裁,作者和选项的引用不是正确的方法:每本书只能存储一个相关值(一种体裁,一个作者,一个选项),而您需要很多。相反,对于每个关系,您应该有一个单独的表,称为桥表,该表引用了关联。
另一方面,取决于书籍的信息(例如书名)应存储在书籍表中。
这里是书籍和流派的一个例子:
create table books(
book_id int primary key,
title varchar(100), --dependent column
pub_date date --dependent column
);
create table genres(
genre_id int primary key,
name varchar(100)
);
create table book_genres(
book_id int references book(book_id),
genre_id int references genre(genre_id),
primary key (book_id, genre_id)
);
现在,假设您要列出所有属于流派'Sci-Fi'
的图书;你会去:
select b.*
from books b
inner join book_genres bg on bg.book_id = b.book_id
inner join genres g on g.genre_id = bg.genre_id
where g.name = 'Sci-Fi'
对于每个多对多关系,应实现相同的逻辑/