我对Mysql还比较陌生,但我有一个无法解决的问题。我给你举个例子来说明。请注意,我知道(目前的例子)有其他更简单和更有效的方法来解决它。。。但就拿它作为必要程序的一个例子。
首先是数据:数据是一个人的名字。
创建表人员(
身份证号码,
名称VARCHAR(100)
)类型=innodb;
第二:创建组。。。所以这很简单。。。而且可以很容易地使用表'group'和外键对人。这些组织可能是任意的,包含任何数量的人,重复。。。或者不。。。(很简单!!)
第三:我真正的问题是——我也希望有其他组作为元素的组(而不是persons)。这是一个真正陷入困境的地方,因为我知道如何创建一组persons,一组groups(有一个自引用外键)。。。但我不知道如何创建一个可能有personsGroups的组。
我感谢任何解决这个问题的建议。
非常感谢你的评论。
当做
阿康博

最佳答案

我会先建立我的群组和个人列表。
其次,我用列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替换表名myGroupGROUP是areserved word
祝你好运!

07-28 13:47