Сначала я настрою таблицы myGroup и person.
Во-вторых, я настрою таблицу myGroupGroup со столбцами myGroupId, parentMyGroupId.Это позволит вам связать строки группы со строками дочерней группы, т. Е. «В этой группе есть эти группы».Если в группе нет строк в этой таблице, то в ней нет дочерних групп.
В-третьих, я бы настроил таблицу 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
- это зарезервированное слово )
Удачи!