下の画像に示すように、多対多の関係をコーディングするのに苦労しています。
これらのテーブルと関係を次のように設定したいと考えています。
- 親は複数の子 (ここでは子は「プレイヤー」) を持つことができ、子は 1 人または複数の親 (最大 2 人) を持つことができます。
- 「家族」は、1 人以上の親 (最大 2 人) と 1 人以上の子供 (無制限) で構成できます。
「子供」とは異なる姓を持つ両親に対応する方法がわかりません。また、その逆も同様です。これが懸念されるかどうかは知らされていませんが、これは考える価値があると思います. Parent クラスと Player クラスはどちらも、person スーパークラスからフィールド (姓名、住所、年齢、生年月日など) を継承します。
ファミリー テーブルへの入力をテストしようとしたとき、1 人または複数の親と、その親 (または介護者) である 1 人または複数の子供を挿入する方法が正確にわからないことに気付きました。理論的にはこれで解決したと思っていましたが、テストの結果、うまくいかないことがわかり、90 分以上かけていくつかのアイデアのスケッチを作成しましたが、本当に道に迷ってしまいました。
================================================== ================================
更新: 2012 年 4 月 27 日 @ 午後 22 時 19 分 NZST
これらのテーブルを含むデータベースにクエリを実行するときに、探している結果を視覚的に表現する必要がありました。視覚的な表現は次のとおりです。
+-------------------+-----------------+---------------------+
| ParentsFirstName | ParentsLastName | ChildrenInFamily |
+-------------------+-----------------+---------------------+
| Gregory | Peck | Michael |
| Laura | Peck | Michael |
| Martha | Petersen | Matt, Christopher |
| Chris | Michaels | Richard, Shaun |
| Nadine | Michaels | Richard, Shaun |
| Barry | Dackers | Harry |
| Kevin | Mitchell | Daniel |
| Rebecca | Mitchell | Daniel |
+-------------------+-----------------+---------------------+
「子」は「プレーヤー」というテーブルにあり、親は「親」というテーブルにあります。この投稿の MySQL コードは、この特定の問題に関するテーブルを表しています (Person クラスをスーパー クラスとして使用し、親/子テーブルをサブクラスとして使用していることに注意してください)。他のいくつかのテーブルは、外部キーを使用して参照されます (「schoolID」フィールドは、「schoolName」フィールドを持つ「School」というテーブルから取得されます)。
私が達成したいことのためにテーブルを正しく構築したかどうかはわかりませんが、いくつかの調査を行ったところ、GROUP_CONCATという関数が見つかりました。これにより、少なくともクエリがどのように見えるかを考えることができました-この特定の問題。
同じ苗字ではない両親や、両親と同じ苗字ではない子供たちを受け入れることは、もう 1 つの大きな課題です。里親の場合も同様です。)したがって、上記の視覚化では、独身ではない親が結婚していて同じ姓を共有しており、子供たちは全員、既婚の両親と同じ姓を共有していると想定しています。
================================================== ================================
この部分を処理しようとするデータベースの部分を作成しようとしたコードを次に示します (注: 「プレイヤー」は親の「子」です)。
DROP TABLE IF EXISTS `person` ;
CREATE TABLE `person` (
`personID` INT(5) NOT NULL AUTO_INCREMENT ,
`firstName` VARCHAR(50) NOT NULL ,
`lastName` VARCHAR(50) NOT NULL ,
`dateOfBirth` DATE NOT NULL ,
`personType` CHAR(6) NOT NULL,
`photo` BLOB NULL DEFAULT NULL ,
PRIMARY KEY (`personID`))
ENGINE = InnoDB;
SHOW WARNINGS;
DROP TABLE IF EXISTS `parent` ;
CREATE TABLE `parent` (
`parentID` INT(5) NOT NULL,
FOREIGN KEY (`parentID`) REFERENCES `person` (`personID`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB;
SHOW WARNINGS;
DROP TABLE IF EXISTS `player` ;
CREATE TABLE `player` (
`playerID` INT(5) NOT NULL,
`schoolID` INT(5) NOT NULL,
FOREIGN KEY (`playerID`)
REFERENCES `person` (`personID`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (`schoolID`)
REFERENCES `school` (`schoolID`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB;
SHOW WARNINGS;
DROP TABLE IF EXISTS `family` ;
CREATE TABLE `family` (
`parentID` INT(5) NOT NULL ,
`playerID` INT(5) NOT NULL ,
PRIMARY KEY (`parentID`, `playerID`),
FOREIGN KEY (`playerID` )
REFERENCES `player` (`playerID`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (`parentID`)
REFERENCES `parent` (`parentID`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB;
SHOW WARNINGS;
誰かがこの問題を解決するのを手伝ってくれて、いくつかのガイダンスと、説明付きの一般的な例さえ提供してくれれば、それは本当に良いことです. 親は 1 人以上の子供を持つことができ、子供は 1 人以上の親を持つことができるため、これは多対多の関係であると思います (このコンテキストでは、家族は実際には子供のいない家族ではありません)。 )。
よろしくお願いします!!!