数据库架构:如何根据类型制作动态表?

时间:2014-02-27 09:09:07

标签: mysql sql database oracle database-schema

我是新手。我正在设计数据库架构而且我被困在这个地方。 我有房间的桌子,一个是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类型创建新表?如果我这样做,我必须稍后进行条件连接以获取所有房间的项目。请帮忙

6 个答案:

答案 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