Wydaje się, że potrzebujesz tylko trochę wskazówek. Więc postaram się być zwięzły.
$sql = "CREATE TABLE customerGroups (
customer_id int(11) NOT NULL,
group_id int(11) NOT NULL,
PRIMARY KEY (customer_id, group_id),
CONSTRAINT customers_customergroups_fk
FOREIGN KEY (customer_id)
REFERENCES customers (customer_id)
ON DELETE CASCADE,
CONSTRAINT groups_customergroups_fk
FOREIGN KEY (group_id)
REFERENCES groups (group_id)
ON DELETE CASCADE
)ENGINE = INNODB;";
Ty tylko potrzebujesz numery identyfikacyjne, gdy tożsamość jest trudna do ustalenia. Kiedy masz do czynienia z ludźmi, trudno jest ustalić tożsamość. Jest wiele osób o imieniu „Jan Kowalski”.
Ale masz do czynienia z dwiema rzeczami, które już zostały zidentyfikowane. (I utożsamiany z numerami identyfikacyjnymi wszystkich rzeczy.)
Kaskadowe usuwanie ma sens. Kaskadowe aktualizowanie numerów identyfikacyjnych jest stosunkowo rzadkie; zakłada się, że nigdy się nie zmienią. (Głównym powodem, dla którego administratorzy baz danych Oracle nalegają, aby klucze podstawowe zawsze być numerami identyfikacyjnymi i nigdy nie mogą zmiana wynika z tego, że Oracle nie może aktualizacje kaskadowe). Jeśli później niektóre numery identyfikacyjne potrzebują zmienić z jakiegokolwiek powodu, możesz zmienić tabelę, aby zawierała ON UPDATE CASCADE.
$sql = "CREATE TABLE groups
(
group_id int(11) NOT NULL AUTO_INCREMENT,
group_title varchar(50) NOT NULL UNIQUE,
group_desc varchar(140),
PRIMARY KEY (group_id)
)ENGINE = INNODB;";
Zwróć uwagę na dodatkowe ograniczenie unikatowości na group_title. Nie chcesz zezwalać na coś takiego (poniżej) w swojej bazie danych.
group_id group_title
--
1 First group
2 First group
3 First group
...
9384 First group
Będziesz chciał przeprowadzić tego rodzaju zmiany na wszystkich swoich stołach. (Może z wyjątkiem Twojej tabeli klientów).