2011-09-24 93 views
5

如何在SQLITE3中創建一對多? 我有2個表:如何在SQLITE3中創建一對多?

Mans: 
_id name 
1 antony 
2 fred 

point 
_id date point 
1  23  77 
     24  99 

2  25  78 
     5  0 

我不知道SQL語法,幫助我,請。

+0

我懷疑第二個表是這樣的 - 這些SQL表或您想要輸入的數據? – Mark

+0

那是第二張表 –

回答

3

其語法如下....

CREATE TABLE (MySecondTable) Foo INT FOREIGN KEY(Foo) REFERENCES MyFirstTable(PrimaryKeyField) ON DELETE CASCASDE ON UPDATE CASCASDE 

僅適用於v3.6.1 +

這裏是文檔http://sqlite.org/foreignkeys.html

+0

illin蝦skrillin小人:你檢查我的答案? –

11

展望由什麼iamkrillin的illin shrimp- skrillin反派:

CREATE TABLE (points) points_id INT 
FOREIGN KEY(man_id) REFERENCES mans(PrimaryKeyField) 
ON DELETE CASCASDE ON UPDATE CASCASDE 

這是一個真實世界的例子。假設你有一些向你推薦業務的人:你的員工,你的朋友,你做廣告的當地企業等等。進來的顧客被稱爲'referal'業務。每個人只被視爲一個參考,但是參考人員可能會參考許多參考(例如,一個僱員可能會提及20個新客戶,該僱員是您的推薦人,而該員工已經提出了20個推薦人)。所以,你有1個引用者和20個referals(一到多):

CREATE TABLE referal(           
    referal_id INTEGER UNIQUE NOT NULL PRIMARY KEY,   //A customer can only be 1 referal. 
    referal_method TEXT,          //How were they refered? By phone? 
    referer_id INTEGER ,          //Who refered them? 
    FOREIGN KEY(referer_id) REFERENCES referer(referer_id)); //Trace more about referer. 

現在,它有可能不止一個人是指一個轉診,但我認爲,這是標準的商業做法是隻補償一個引用者。所以,你永遠不需要列出兩個查閱者。這將始終是1對1或1對多的關係;因此,你應該把它做成一對多的表格。我並不是很熟悉CASCADE的東西,但我會試着弄清楚它是如何適合的。

乍一看,ON UPDATE CASCADE ON DELETE CASCADE不屬於我的答案,因爲刪除最後的參考不應該刪除引用者。

看着a different example

CREATE TABLE all_candy 
    (candy_num SERIAL PRIMARY KEY, 
    candy_maker CHAR(25)); 

CREATE TABLE hard_candy 
    (candy_num INT, 
    candy_flavor CHAR(20), 
    FOREIGN KEY (candy_num) REFERENCES all_candy 
    ON DELETE CASCADE) 

如果您刪除的hard_candy表中的硬糖,那麼你也從all_candy表中刪除,因爲硬糖是一種糖,如果類型的糖果已經改變(例如,停止糖果),那麼無論如何,需要執行新的INSERT命令。

我在sqlite3中運行了ON UPDATE CASCADE和ON UPDATE DELETE的測試用例,它似乎沒有任何效果。也許他們不使用sqlite3的默認數據庫引擎,但官方SQLite網站上列出的功能是:a very descriptive, easy-to-follow example of ON UPDATE CASCADE by sqlite.org。閱讀並看看你的想法。

這是我用我的測試案例的模式:

BEGIN TRANSACTION; 
CREATE TABLE candy(id integer primary key not null, name text, description text); 
INSERT INTO candy VALUES(1,'Laffy Taffy', 'Delicious, soft candy.'); 
INSERT INTO candy VALUES(2,'Pop Rocks', 'A candy that explodes in your mouth.'); 
COMMIT; 

BEGIN TRANSACTION; 
CREATE TABLE hard_candy(id integer primary key not null, name text, description text, foreign key(id,name,description) references hard_candy ON DELETE CASCADE ON UPDATE CASCADE); 
INSERT INTO hard_candy VALUES(2,'Pop Rocks', 'A candy that explodes in your mouth.'); 
COMMIT; 

跑任一表的ID-2描述字段的各種更新。

相關問題