我是新手。我正在设计数据库架构而且我被困在这个地方。 我有房间的桌子,一个是rooms_Items,每个房间都有很多room_Items 问题是我需要根据房间类型
在room_items中使用不同的字段间
Id name
1 LG-12FG
2 LG-31FG
Room_item
Id name room_id required field
1 Window 1 mirror/type/size
2 Door 1 type/size/code
3 Wall 1 layer/color
4 Wall 2 layer/color
我不知道该怎么做。我是否需要为每个room_item类型创建新表?如果我这样做,我必须稍后进行条件连接以获取所有房间的项目。请帮忙
答案 0 :(得分:0)
在你的位置,首先我创建了一个包含如下字段数据的表:
Field_name ID_Item Value
size 2 '10.0'
color 3 'Black'
......
您可以使用构建器模式在房间中创建项目。例如,
exec ADD_Black_Door @roomID
此代码可能会向您的房间添加一个项目(Door),并使用默认值(Color ='Black'等)添加上一个表格中的所有必填字段。
答案 1 :(得分:0)
如果我理解你的需要,你应该制作三张桌子:
房间
room_id | Name (...)
--------------------
项
item_id | Name (...)
--------------------
ROOMS_ITEMS
room_id | item_id
-------------------
在最后一张表中,映射属于房间的项目。
答案 2 :(得分:0)
首选(规范化)解决方案是为每个项目类型(表Windows,表门,表墙)创建单独的表。这将使选择数据更加困难,因为您必须进行多次连接。
或者,您可以创建包含项目所有属性的单个表格:
item_id, room_id, type , size, color, code, type2 , layer
1 , 1, Window , 100, NULL, NULL, WindowType1, NULL
2 , 1, Door , 90, NULL, 1, DoorType1 , NULL
3 , 1, Wall , NULL, red, NULL, NULL, 2
3 , 2, Wall , NULL, green, NULL, NULL, 1
答案 3 :(得分:0)
我认为如果您为房间中的每个实体都有一个表格,这将更容易理解,因为这是您要在数据值之间进行区分的单位。
由于在您的情况下门不是墙,您可以制作这两个单独的表,然后您可以使用room_items作为其间的表。
Wall
ID | layer | color
Window
ID | Mirror | Type | Size
然后在房间里,因为item_id可以指向几个类似的id,因为每个项目都创建了自己的增量ID,所以你添加了item_type,用于区分你想要查找的元素类型。
Room
room_id | item_id | item_type
答案 4 :(得分:0)
请加入两个表之间的表格:
SELECT RI.id,
RI.name,
RI.room_id,
RI.required field,
R.id AS RoomId,
R.name AS RoomType
FROM room_item RI
LEFT OUTER JOIN room R
ON R.id = RI.room_id
答案 5 :(得分:0)
这是一个解决方案。 创建表Room,Room_Item,Item_specification
<强>室强>
room_id | ROOM_NAME
<强> room_item 强>
item_id | room_id | ITEM_NAME
<强> Item_specification 强>
spec-id | item-id | spec_name