2012-03-18 46 views
0

我遇到了正在执行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,所以被点名的人表非常久远的表名为部门就能解决的目的。

有没有一种方法可以在单个表中管理相同的数据?

我需要一种方法来创建一个数据库表,我可以有可变数量的列来存储部门值。

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

由于提前

+0

您正在考虑使用哪种RDBMS? – 2012-03-18 15:53:46

+0

我宁愿任何开放源代码数据库,它没有任何商业关联或倾向,例如PostgreSQL,Derby等 – dpsmails 2012-03-18 16:00:38

回答

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

您可能不需要提出的所有领域。所以请根据需要进行编辑。

+0

可能有很多deptids,所以你的解决方案将无法工作,恐怕。 – dpsmails 2012-03-18 16:02:26

1

你说:

在这里你可以看到,一个人可以同时属于多个部门1,这样的表被点名的人非常久远的表名为部门就能解决的目的。

再次考虑该评论。如果人与部门之间的关系是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> 

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

有没有一种方法可以在单个表中管理相同的数据?

我只能想到这样做的三种方式(一个比另一个更可怕的):

  • 列添加到一个需要MAX(假设你知道不会有超过X部门每人)
  • 只留下两列,一个为人,另一个为部门,并将其用作多值字段(yuk!)。 EG:使用某种分隔符来标识部门何时结束并启动其他部门
  • 实体属性值模型:在StackOverflow中已经讨论过很多次。 Here是如何与它

我需要一种方法来有一个数据库表,我可以有可变数量的列存储部门的工作价值观的exmplanation。

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

有没有与RDBMS的方式来实现这一目标?

任何主要的都可以。

我的看法?使用更多的表格!这种解决方案将带给你更多的麻烦和麻烦!

+0

+1非常周到的答案。逻辑数据和物理数据之间往往存在断开。你在指出差异方面做得非常出色。做得好。 – 2012-03-25 12:47:38