首页 >后端开发 >php教程 >一张数据表如何设置两个或多个外键?(已经更新了后续的问题,见链接)

一张数据表如何设置两个或多个外键?(已经更新了后续的问题,见链接)

WBOY
WBOY原创
2016-06-06 20:06:232340浏览

目前后续的问题,已经更新,链接地址

我正在做商城数据表的设计,目前有一个商品表goods、商品属性表attributes、商品与属性关联表goods_and_attributes

一张数据表如何设置两个或多个外键?(已经更新了后续的问题,见链接)

如图所示,商品表已经与商品属性关联表有了联系,现在我想在商品属性关联表goods_and_attributes中设置外键attribute_id与商品属性表attributes联系起来,数据库会报错:

一张数据表如何设置两个或多个外键?(已经更新了后续的问题,见链接)

一张数据表如何设置两个或多个外键?(已经更新了后续的问题,见链接)

我清空了数据,并且重新创建slq语句:

<code>DROP TABLE IF EXISTS `goods_and_attribute`;
CREATE TABLE `goods_and_attribute` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `goods_id` int(11) DEFAULT NULL,
  `value` varchar(50) NOT NULL,
  `stock` int(11) NOT NULL,
  `attribute_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `IDX_72C0A1A2B7683595` (`goods_id`),
  KEY `IDX_20160603` (`attribute_id`) USING BTREE,
  CONSTRAINT `FK_good_id_20160519` FOREIGN KEY (`goods_id`) REFERENCES `goods` (`id`)
  CONSTRAINT `FK_attribute_id_20160603` FOREIGN KEY (`attribute_id`) REFERENCES `attributes` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
</code>

报错信息如下:

<code>Error : 
You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near 'CONSTRAINT `FK_attribute_id_20160519` 
FOREIGN KEY (`attribute_id`) REFERENCES `a' at line 1
</code>

如果能给我一些建议,对我来说莫大的帮助!

回复内容:

目前后续的问题,已经更新,链接地址

我正在做商城数据表的设计,目前有一个商品表goods、商品属性表attributes、商品与属性关联表goods_and_attributes

一张数据表如何设置两个或多个外键?(已经更新了后续的问题,见链接)

如图所示,商品表已经与商品属性关联表有了联系,现在我想在商品属性关联表goods_and_attributes中设置外键attribute_id与商品属性表attributes联系起来,数据库会报错:

一张数据表如何设置两个或多个外键?(已经更新了后续的问题,见链接)

一张数据表如何设置两个或多个外键?(已经更新了后续的问题,见链接)

我清空了数据,并且重新创建slq语句:

<code>DROP TABLE IF EXISTS `goods_and_attribute`;
CREATE TABLE `goods_and_attribute` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `goods_id` int(11) DEFAULT NULL,
  `value` varchar(50) NOT NULL,
  `stock` int(11) NOT NULL,
  `attribute_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `IDX_72C0A1A2B7683595` (`goods_id`),
  KEY `IDX_20160603` (`attribute_id`) USING BTREE,
  CONSTRAINT `FK_good_id_20160519` FOREIGN KEY (`goods_id`) REFERENCES `goods` (`id`)
  CONSTRAINT `FK_attribute_id_20160603` FOREIGN KEY (`attribute_id`) REFERENCES `attributes` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
</code>

报错信息如下:

<code>Error : 
You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near 'CONSTRAINT `FK_attribute_id_20160519` 
FOREIGN KEY (`attribute_id`) REFERENCES `a' at line 1
</code>

如果能给我一些建议,对我来说莫大的帮助!

不要用数据库的物理外键,用程序实现和维护逻辑外键,尤其是在高并发的互联网环境。

楼上正解.做物理外键是一种很不明智的选择.

我做过的工程从来都没做外键,这东西没什么意义啊,还有很多意外的影响,一般表做点索引就行了,还不是所有的情况都有,外键在大多数情况下,基本就是过度设计,没什么必要。你好好想想goods_and_attributes这表的设计更现实一些,当然你其他表设计的也。。。,创建者和日期,还有status或deteled都没有,你这也太简单了吧,像玩具啊,

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn