在单个db表中连接的替代方法

时间:2012-03-18 15:51:36

标签: database-design

我的情况是正在执行2个表的连接。记录结构如下:

<person>
 <name>person name1</name>
 <dept>dept1</dept>
 <dept>dept2</dept>
 <dept>dept3</dept>
</person>

<person>
 <name>person name2</name>
 <dept>dept4</dept>
 <dept>dept5</dept>
</person>

在这里你可以看到一个人可以属于1个以上的部门,所以一个名为person的表和一个名为dept的表将解决目的。

有没有办法可以在一张表中管理相同的数据?

我需要一种方法来建立一个数据库表,我可以使用可变数量的列来存储dept值。

RDBMS有没有办法实现这一目标? 我也很感激任何开箱即用的想法。

先谢谢

2 个答案:

答案 0 :(得分:1)

你说:

  

在这里你可以看到一个人可以属于1个以上的部门,所以一个名为person的表和一个名为dept的表将解决目的。

三思而后行。如果人与部门之间的关系是ownsvisits那么这不是一对多关系,而是多人关系,因为一个人可以拥有或访问多个部门和部门可以由多人拥有或访问。根据您的示例,这将转化为此(请参阅dept3):

<person>
 <name>person name1</name>
 <dept>dept1</dept>
 <dept>dept2</dept>
 <dept>dept3</dept>
</person>

<person>
 <name>person name2</name>
 <dept>dept3</dept>
 <dept>dept4</dept>
 <dept>dept5</dept>
</person>

但是,当然,这取决于你没有提到的要求。

  

有没有办法可以在一张表中管理相同的数据?

我只能想到三种做法(一种比另一种更可怕):

  • 添加最多需要的列(假设您知道每人不会超过X个部门)
  • 只留下两列,一个用于人,另一个用于部门,并将其用作多值字段(yuk!)。 EG:使用某种分隔符来识别部门何时完成并启动另一个
  • 实体 - 属性 - 值模型:这已在StackOverflow中多次讨论过。 Here是对如何使用它的一种解释
  

我需要一种方法来建立一个数据库表,我可以使用可变数量的列来存储dept值。

任何RDBMS中的变量实际上不是列而是行,所以处理它总是很复杂。

  

RDBMS是否有办法实现这一目标?

任何主要的都可以。

我的意见?使用更多表格!这个解决方案会给你带来麻烦和很多麻烦!

答案 1 :(得分:0)

create table mytable(
    record_id int(11) not null auto_increment,
    ss_num   int(9) not null,
    firstname varchar(20) not null,
    lastname  varchar(20) not null,
    middlename varchar(20),
    deptid     int(11),
    deptname   varchar(5),
    primary key(record_id)
)

您可能不需要提供所有字段。所以根据需要进行编辑。