2012-08-31 35 views
0

我有以下情況,table Article和table Fruit。兩者都代表下面在MYSQL中加入我的colums的唯一性

create table Article 
(
    ART_ID   bigint not null auto_increment, 
    ART_NAME   varchar(25) not null, 
    primary key(ART_ID) 
); 




create table Fruit 
( 
    ART_ID bigint not null, 
    FRU_DES varchar(25) not null, 
    Foreign Key (ART_ID) references Article(ART_ID) 
); 

現在是OK就我個人來說,但是當我爲了營造水果要輸入一些數據,我不能創建表對象不宣ART_ID,但是如何如果我已經將它聲明爲auto_increment,那麼這是可能的。

我不能做下面的指令到我的DB,

insert into Fruit(FRU_DES) 
values('dsd'); 

不過,我可以做

insert into Fruit(ART_ID, FRU_DES) 
values(1,'dsd'); 

但是我不希望這種情況有原因可能會造成一些問題如果在這個項目的後期階段某些事情被忽略了。任何幫助表示讚賞。

+0

。什麼是水果桌上的主要關鍵...... –

+0

該表中的主鍵是強制性的嗎? – Takarakaka

+0

取決於您是否希望允許一篇文章擁有兩個dsd成果,並處理諸如如何刪除其中一個無法唯一標識的問題等問題。就個人而言,我會避免這種情況,並且每個表 –

回答

0

只要你把外鍵放在你說的是有效的水果上,就必須有一個對有效文章的引用。

在ORM或其他代碼模型中,AddFruit將是Article上的一種方法,即Art_ID在您進行嘗試之前已知。

在直接的SQL,也許

Insert into Fruit Select Article.Art_ID,'apple' From Article Where Article.Artname = 'Still life by P Frame' 

清楚。

+0

上總是有一個主鍵,但是如果我將Article作爲模板(抽象表)來聲明,以便將我的子表與相同的列相乘,怎麼辦? – Takarakaka

+0

子表應該是默認選項。即做一個規範化的設計,然後如果你確實真的需要非規範化,並且準備在第2版中感到抱歉。也許@Laoujin的回答將會幫助我比你的意思更貼切。 –

0

如果我理解正確的話,你就需要第三個表:

  • 你的文章表作爲是
  • 你的水果表得到了FRU_ID auto_incrementART_ID列被丟棄
  • 的ArticleFruit表其中包含ART_ID和FRU_ID列

這將允許您在您的數據庫中插入一次水果,而不直接將其鏈接到文章,同時您仍然可以通過向ArticleFruit表添加記錄來將水果鏈接到文章。順便說一句,

+0

如果我傳遞NULL,那就意味着它沒有引用現有的文章,即它沒有它的編號。我認爲它是有效的,但是我的cmd認爲它不是。 – Takarakaka

+0

糟糕,我誤讀了表格的定義。我會更新我的答案。 – Laoujin