2012-08-31 10 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