2016-09-19 9 views
0

私は何かのために基本的なSQLの質問が間違っています。だから私はこれを達成するための適切な方法は何かを尋ねたい。 私は部屋のテーブルを持っています。部屋には部屋の大きさ、名前、壁の色があります。部屋は家具のテーブルを持って、それは多くの家具を持つことができます。複数の家具を部屋に接続する正しい方法は何ですか?例:SQLにデータを格納する適切な方法

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... 

したがって、家具を部屋に接続する正しい方法は何ですか。ユーザーは複数の部屋と複数の家具を作成できます

+1

「Room'と 'furnitureId'ごとに1つの行を持つジャンクション表と呼ばれる別の表が必要です。 –

+0

@ GordonLinoffは、ルームと家具の間にM:M関係を作成する必要があると言いました。これを行うには、RoomIdとFurnitureIdという列を持つテーブル(RoomFurnitureと呼ぶことができます)が必要です。 –

答えて

1

が参加する多対多(nm)の関係テーブルを作成し、さまざまなforniture二。あなたの表記法に基づいて:

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) 

これは家具の項目ごとに1行を与えます。 GROUP_CONCAT()

SELECT r.*, GROUP_CONCAT(f.type) FROM Room AS r 
LEFT JOIN RoomHasFurnature USING(roomID) 
INNER JOIN Furniture AS f USING(furnatureID) 
1

はあなたが広告リレーショナルテーブルなどの名前必要があります。room_forniture各部屋に参加するため

Room Table 
roomID: 5 
size: 15 
wallColor: Blue 


Room_forniture Table 
rooID: 5 
fornitureID = 2 

Room_forniture Table 
rooID: 5 
fornitureID = 4 

Room_forniture Table 
rooID: 5 
fornitureID = 5 


Furniture Table 
furnitureID 2 
type: table 
color: wood 

Furniture Table 
furnitureID 4 
type: closet 
color: wood 
...... 
関連する問題