任何人都可以提供多对多的MySQL分步指南吗?

时间:2010-09-14 17:49:57

标签: mysql

在上下搜索,阅读所有可能的文章和教程之后,我掌握了这个概念的基础知识,但仍然无法做到这一点,以及我能看到的其他许多文章。

有人可以发布100%实用和虚拟证明指南来创建和MySQL的多种基本用法关系,我很确定很多人会从中受益。

我所拥有的是一个包含多个项目的表格,例如I1,I2,I3 ......

我有另一张表,有许多属性,比如P1,P2,P3 ......

对于每个项目,每个属性可能包含false或true,例如

I1具有属性P2和P3 I2具有属性P1,P2和P3 I3具有属性P1 ...

那么如何创建关系呢? (如果可能请提供代码)

一旦创建,如何

  • 插入某个项目的属性
  • 了解哪些属性适用于某些现有项目

提前致谢

4 个答案:

答案 0 :(得分:1)

第1步 - 设置表:

你应该有一个如下所示的表结构(*是主键):

Item
---------
ItemId*
ItemName


ItemProperties
--------------
ItemId
PropertyId


Properties
----------
PropertyId*
PropertyName

第2步 - 设置外键关系:

ItemProperties表中的两列都是其对应表的外键(ItemId到Item表,PropertyId到Properties表)

第3步 - 代码:

要将属性与PropertyIds 35和44关联到ID为111的项目,您将运行以下命令:

INSERT INTO ItemProperties (ItemId,PropertyId) VALUES (111,35)
INSERT INTO ItemProperties (ItemId,PropertyId) VALUES (111,44)

要选择与项目关联的所有属性,请运行以下命令:

SELECT ip.PropertyId, ip.PropertyName
FROM Item as i
INNER JOIN ItemProperties as ip ON i.ItemId = ip.ItemId
WHERE i.ItemId = 111

答案 1 :(得分:0)

在两者之间创建一个中间表,其中包含来自其他表的ID。这样,此表中可以有多个引用(行)将不同的项连接到多个不同的属性。这有意义吗?

答案 2 :(得分:0)

我要做的是创建一个名为ItemProperties的表,其中包含ItemIdPropertyIdPropertyValue列。

(ItemId, PropertyId)对于此表是唯一的。

答案 3 :(得分:0)

这会将产品链接到属性,允许多个具有相同名称的项目。

CREATE TABLE products (
  productid int(11) NOT NULL AUTO_INCREMENT,
  productname varchar(20) NOT NULL,
  description text NOT NULL,
  PRIMARY KEY (productid),
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE products_property (
  relationid int(11) NOT NULL AUTO_INCREMENT,
  productid int(11) NOT NULL,
  propertyname int(11) NOT NULL,
  PRIMARY KEY (relationid)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE properties (
  property varchar(30) NOT NULL,
  value enum('true','false') NOT NULL,
  PRIMARY KEY (property)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;