2013-05-03 51 views
0

我已經從Firebird數據庫在Mysql中創建了一個數據庫。 在數據庫中有一個通用序列表(Common_ID),它爲所有表(數據庫中的45個表)生成序列。有些表是所有表的Mysql-單一序列表

Table1 = Sequence (ID Auto-increment)-The Common Sequence Table 
Table2 = Process (Sequence, Process_Number(Unique), Category_Name) 
Table2 = Tasks (Sequence, Barcode(Unique), Process_Number(sequence from Process Table), Product_Name) 

此數據庫已經有超過600,000條記錄。 一個「過程」可以有許多「任務」。 我的問題是: 「序列」表和「過程/任務」表之間應該有什麼關係? 流程表和任務表之間應該有什麼關係? 如何插入「序列」表並在其他表中使用該「ID」?

這是我的第一個問題,我是數據庫的新手,對任何錯誤表示歉意。

回答

0

序列和過程之間的關係是一一對應的,序列和任務之間的關係也是一一對應的(並且每個其他表以這種方式使用您的序列表)。這個關係的一方(進程或任務)不需要存在。

進程和任務之間的關係是一對多關係。

你的插入會像

insert into Sequence values (0); 
insert into Process values (last_insert_id(), ....); 

insert into Sequence values (0); 
insert into Task values (last_insert_id(), ....); 

順便說一句,在數據模型中的表進程現在有兩個主鍵。當您在Task中使用進程的序列作爲外鍵時,它可能是一個更好的數據模型。

+0

感謝您的答覆。在序列表中,我還添加了一個字段來存儲序列被生成和使用的表名,現在如果兩個用戶插入了例如一個在進程表中,另一個在任務表中,當我使用Last_insert_ID()時,會有任何問題(混淆或其他)。 – user2345661 2013-05-03 06:59:03

+0

沒問題。他們有不同的數據庫會話。 'last_insert_id()'獲取該會話中最後插入的id。插入其他會話無關緊要。 – Johanna 2013-05-03 07:08:47

+0

對不起再次打擾你。我應該使用存儲過程和事務,或者只是簡單的插入就可以完成作業。此外,我的表格應該是什麼類型(Innob,MyISAM等),還是讓它保持原樣。 – user2345661 2013-05-03 07:33:00