mysql - 在 SQL 中存储数据的正确方法

标签 mysql sql database

我对我做错的事情有基本的 SQL 问题。所以我想问一下实现这一目标的正确方法是什么。 我有房间的 table 。房间有房间大小、名称和墙壁颜色。房间里有家具 table ,可以放很多家具。将多个家具连接到房间的正确方法是什么?例如:

Room Table
roomID: 5
size: 15
wallColor: Blue
haveFurniture: 2,4,5 //This is the part I`m not sure about

Furniture Table
furnitureID 2
type: table
color: wood

Furniture Table
furnitureID 4
type: closet
color: wood

etc...

那么,将家具与房间连接的正确方法是什么?用户可以创建多个房间和多个家具

最佳答案

创建一个多对多 (n-m) 关系表来连接两者。根据您的注释:

RoomHasFurnature Table
roomID 5
furnitureID 2

RoomHasFurnature Table
roomID 5
furnitureID 4

RoomHasFurnature Table
roomID 5
furnitureID 5

然后,您可以使用联接来提取该数据。这是一个粗略的例子:

SELECT * FROM Room
LEFT JOIN RoomHasFurnature USING(roomID)
INNER JOIN Furniture USING(furnatureID)

这将为每个家具项目提供一行。您可以使用 GROUP_CONCAT()

在某些 SQL 方言中压缩它
SELECT r.*, GROUP_CONCAT(f.type) FROM Room AS r
LEFT JOIN RoomHasFurnature USING(roomID)
INNER JOIN Furniture AS f USING(furnatureID)

关于mysql - 在 SQL 中存储数据的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39571687/

相关文章:

sql - 在SQLite中,如何使用表B中列的值更新表A中的列?

sql - Postgres : return first N rows per group for groups having a minimum countI

php - 查询使用like语句但不使用全文mysql索引

database - 数据仓库和/或数据库?

c# - CollectionChanged 事件的循环数据库更新

mysql - 创建存储过程时 MySQL 中的输入意外结束

php - MySQL 查询(28K 行)使服务器过载

sql-server - AWS NVMe 存储 - 托管数据库

mysql - 外部连接中的 IF/CASE

php - 使用 PHP 存储视频时出现未定义索引错误