我对Mysql还比较陌生,但我有一个无法解决的问题。我给你举个例子来说明。请注意,我知道(目前的例子)有其他更简单和更有效的方法来解决它。。。但就拿它作为必要程序的一个例子。
首先是数据:数据是一个人的名字。
创建表人员(
身份证号码,
名称VARCHAR(100)
)类型=innodb;
第二:创建组。。。所以这很简单。。。而且可以很容易地使用表'group
'和外键对人。这些组织可能是任意的,包含任何数量的人,重复。。。或者不。。。(很简单!!)
第三:我真正的问题是——我也希望有其他组作为元素的组(而不是persons
)。这是一个真正陷入困境的地方,因为我知道如何创建一组persons
,一组groups
(有一个自引用外键)。。。但我不知道如何创建一个可能有persons
和Groups
的组。
我感谢任何解决这个问题的建议。
非常感谢你的评论。
当做
阿康博
最佳答案
我会先建立我的群组和个人列表。
其次,我用列myGroupId、parentMyGroupId建立了一个myGroupGroup表。这将允许您将组行与子组行关联,即“此组包含这些组”。如果一个组在此表中没有行,则该组中没有子组。
第三,我建立了一个personGroup表,其中列personId,myGroupId。这将允许您将人员行与给定组关联。如果组在此表中没有行,则该组中没有人员。
CREATE TABLE person(
id INT UNSIGNED PRIMARY KEY,
name VARCHAR(100)
) ENGINE=innodb;
CREATE TABLE myGroup(
id INT UNSIGNED PRIMARY KEY,
groupName VARCHAR(100)
) ENGINE=innodb;
-- Holds groups within groups
CREATE TABLE myGroupGroup(
id INT UNSIGNED PRIMARY KEY,
myGroupId INT UNSIGNED,
parentMyGroupId INT UNSIGNED DEFAULT NULL,
CONSTRAINT `fk_myGroupGroup_group1` FOREIGN KEY (`parentMyGroupId`) REFERENCES `myGroup` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_myGroupGroup_group2` FOREIGN KEY (`myGroupId`) REFERENCES `myGroup` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=innodb;
-- Holds persons within a group
CREATE TABLE personGroup(
id INT,
personId int UNSIGNED NOT NULL,
myGroupId int UNSIGNED NOT NULL,
CONSTRAINT `fk_personGroup_group1` FOREIGN KEY (`myGroupId`) REFERENCES `myGroup` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_personGroup_person1` FOREIGN KEY (`personId`) REFERENCES `person` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=innodb;
我调整了一下你的SQL:
1)将
TYPE
替换为ENGINE
2)用
group
替换表名myGroup
(GROUP
是areserved word)祝你好运!