2014-10-17 50 views
0

我爲儘量讓使用創建SQL, 表,當一個人可以在多個地方工作的表,一個地方可以有它的工作多的人, 這是我嘗試,我敢肯定,它不是正確創建的SQL,一個表,其中每個元組可以有多發性值

 create table (person char(15), place char(15), salary int) 

,因爲現在一個人可以在多個地方工作,即時通訊困惑應元組的地方有多個值, 如果是。我該怎麼做 在此先感謝

+0

以供將來參考:在關係數據庫*元組可以永遠*有不同的列數。這是關係數據庫的基本結構的一部分 - 表中有一定數量的列,並且該表中沒有元組的列將具有不同數量的列。 – mmcrae 2014-10-17 17:24:56

+0

不相關但是:你最有可能做**不**要使用'char(xxx)'。該數據類型用空格填充到定義的長度。 – 2014-10-17 17:39:13

回答

1

你應該創建三個獨立的表:

"persons" 
int ID (primary key, auto-increment) 
varchar username 
varchar email ... (all other info needed) 

"places" 
int ID (primary key, auto-increment) 
varchar name 
etc. 

而第三個表給出了兩者之間的關係:每次

"person_places" (or place_persons, depends on what you like) 
int ID (primary key, auto-increment) 
int place_id (linked to the ID of the "places" entry) 
int person_id (linked to the ID of the "persons" entry) 

這樣一來,一個人開始在新的地方工作,你只需添加一個條目到「person_places」。同樣的事情,當他們離開一個地方,或一個地方歇業或任何,你只需要觸摸「person_places」表。

而且,這樣一來,一個人可以在幾個地方工作,就像一個地方能有幾個人在它的工作。

2

它被稱爲n關係。使用3臺

persons table 
------------- 
id int 
name varchar 


places table 
------------ 
id int 
name varchar 


place_persons table 
------------------- 
place_id int 
person_id int 
0

這不是標準化的,但它是確定使用這個作爲你只有3列和正常化將增加更多的頭痛連接和額外的列定義的關係。

假設PERSONA工作在兩個PlaceA和PlaceB。 PersonB也能在這兩個地方,但在不同的工資那麼你的數據會是這樣

insert into Yourtable values 
('PersonA','PlaceA',1000), 
('PersonA','PlaceB',2000), 
('PersonB','PlaceA',1100), 
('PersonB','PlaceB',1200), 
('PersonC','PlaceA',1000) 

,如果你想知道有多少地方的人物的作品,那麼你查詢將被

select place from YourTable where person = 'PersonA' 

這你不需要在同一個元組中保存多個值。

相關問題