2012-03-18 45 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