mysql - 处理这些 MySQL 数据库关系的最佳方法是什么?

标签 mysql relational-database

我正在构建一个小型网站,让用户可以相互推荐他们最喜欢的书籍。所以我有两张 table ,书籍和小组。一个用户的图书馆中可以有 0 本书或多本书,一本书属于 1 个或多个组。目前,我的表格如下所示:

books table
|---------|------------|---------------|
| book_id | book_title | book_owner_id |
|---------|------------|---------------|
| 22      | something  | 12         |
|---------|------------|---------------|
| 23      | something2 | 12         |
|---------|------------|---------------|

groups table
|----------|------------|---------------|---------|
| group_id | group_name | book_owner_id | book_id |
|----------|------------|---------------|---------|
| 231      | random     | 12            | 22      |
|----------|------------|---------------|---------|
| 231      | random     | 12            | 23      |
|----------|------------|---------------|---------|

如您所见,users+books 和 books+groups 之间的关系在表中定义。我应该在他们自己的表中定义关系吗?像这样:

books table
|---------|------------|
| book_id | book_title |
|---------|------------|
| 22      | something  |
|---------|------------|
| 23      | something2 |
|---------|------------|

books_users_relationsship table
|---------|------------|---------|
| rel_id  | user_id    | book_id |
|---------|------------|---------|
| 1       | 12         | 22   |
|---------|------------|---------|
| 2       | 12         | 23   |
|---------|------------|---------|

groups table
|----------|------------|
| group_id | group_name |
|----------|------------|
| 231      | random     | 
|----------|------------|

groups_books_relationsship table
|----------|---------|
| group_id | book_id |
|----------|---------|
| 231      | 22      |
|----------|---------|
| 231      | 23      |
|----------|---------|

感谢您的宝贵时间。

最佳答案

具有四个表的第二种形式是正确的。您可以从 books_users_relationsship 中删除 rel_id,因为主键可能与 user_idbook_id 组合在一起,就像在 groups_books_relationsship 表。

关于mysql - 处理这些 MySQL 数据库关系的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4767859/

相关文章:

php - blueimp jquery 文件上传 - 使用标题等数据输入重命名文件名

javascript - 添加超过 1 个变量以从脚本在 php 上调用

mysql - 将纬度和经度存储在单独的表中是否可以提高性能

mysql - phpMyAdmin - 错误 : relational features are disabled

database - 给定与 FD 的关系,计算属性集的闭包

mysql - 是否可以使用 Phing 执行 MySQL 查询并将值设置为属性?

mysql - 使用 MySQL 存储过程将 CSV 字符串转换为表

java - JDBC:创建表查询语法错误

java - 我可以用lucene索引RDB吗?

mysql - 如何在 JOIN 查询后显示结果表中连接表的主键?