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

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

WBOY
WBOYOriginal
2016-06-06 20:06:232342browse

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

我正在做商城数据表的设计,目前有一个商品表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都没有,你这也太简单了吧,像玩具啊,

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn