2010-03-06 22 views
1

我創建了一個數據庫名稱movielibrarysystem中,我有3個表插入數據..如何使用多個表

是類型,出版商和電影..​​....現在1個出版商可以有很多很多的電影和1部電影是很多類型..在電影表中,發行商ID以及typeid是作爲一個外鍵..

我的問題是,如何將數據插入到電影表中...我已經插入數據到發佈商和類型表,但我不能夠插入到電影表..

回答

2

這就是你要做的。首先,發行商和電影之間的關係是一對多的關係 - 發行商可以發佈許多電影,但每部電影只有一個發行商。然而,輸入電影是一種多對多的關係(你說一部電影有很多種類型,但也有一種類型是很多電影的情況),所以你應該有一張額外的關係表。

本質:

publisher: 
    publisher_id 
    publisher_name 
    <other publisher info> 
type: 
    type_id 
    type_name 
    <other type info> 
movie: 
    movie_id 
    movie_name 
    publisher_id references publisher(publisher_id) 
    <other movie info> 
movie_type: 
    movie_id references movie(movie_id) 
    type_id references type(type_id) 

與所有這些合適的主鍵。

然後假設你插入的出版商和類型,你可以這樣插入影片:

begin transaction; 
insert into movie (movie_name,publisher_id) values (
    'Avatar', 
    (select publisher_id from publisher where publisher_name = 'Spielberg') 
); 
insert into movie_type (movie_id,type_id) values (
    (select movie_id from movie where movie_name = 'Avatar'), 
    (select type_id from type where type_name = 'SciFi') 
); 
insert into movie_type (movie_id,type_id) values (
    (select movie_id from movie where movie_name = 'Avatar'), 
    (select type_id from type where type_name = 'GrownUpSmurfs') 
); 
commit; 

換句話說,你可以使用子查詢從基於一個唯一相關的表獲得的ID一組屬性(上面的例子假設電影名稱是獨一無二的,實際上你需要一個更具體的查詢,比如用不同的電影來處理同名的電影:例如Omega Man)。

如果您不使用支持數值選擇部分的數據庫管理系統,那麼您最好的辦法就是記住或提取相關值到您使用的任何編程語言的變量,並構建一個查詢來執行它。在僞代碼:

begin transaction; 
insert into movie (movie_name,publisher_id) values (
    'Avatar', 
    (select publisher_id from publisher where publisher_name = 'Spielberg') 
); 
select movie_id into :m_id from movie where movie_name = 'Avatar'; 
select type_id into :t_id1 from type where type_name = 'SciFi'; 
select type_id into :t_id2 from type where type_name = 'GrownUpSmurfs'; 
insert into movie_type (movie_id,type_id) values (:m_id, :t_id1); 
insert into movie_type (movie_id,type_id) values (:m_id, :t_id2); 
commit; 

在回答您的評論:

哎,我沒有得到一點,類型和電影的關係..請你詳細說明了這一點..關於Abid

Avatar和Solaris都可以被認爲是SciFi類型。如此多的電影到一種流派。 Xmen:金剛狼可以被認爲是動作和漫畫翻拍。一部電影中有很多類型。

多對多關係最好用包含兩個相關表之間交叉匹配的單獨表格表示。

+0

嘿,我沒有得到類型和電影關係的點..請你詳細說明這一點..關於Abid – Abid 2010-03-06 08:51:44

+0

錯誤:它給這個子查詢不允許在這種情況下只允許scalarexpressions – Abid 2010-03-06 09:22:57

0

如果您約束表類型和發佈者使用外鍵將需要先將兩個ID插入到電影表中。如果可能的話,我會讓電影表成爲增加外鍵的表格。

+0

我已經完成了..我只想插入數據到電影中,我沒有得到 – Abid 2010-03-06 08:38:27