1

私は、母が両親へのクリスマス プレゼント用にまとめた家系図レポートに同行して紹介するために、Family Tree + History [PHP] Web サイトを構築しています。ツリーは少なくとも、MySQL データベース (「家族」) に基づいており、現在、「人」と「結婚」の 2 つのテーブルで作業しています。私は 3 番目のテーブル「親子関係」も持っていますが、それは不要だと考えています。

テーブルの構造は次のとおりです。

PERSONS
- 'personID' [tinyint, pk]
- 'firstName'
- 'lastName'
- 'sex' [set{'M','F'}]
- 'birthDate'
- 'fatherID' [internal rel = 'personID']
- 'motherID' [internal rel = 'personID']
- 'birthPlace'
- 'deathDate'
- 'deathPlace'
- 'birthRecord' (filename)

MARRIAGES
- 'husbandID' [internal rel = 'persons.personID']
- 'wifeID' [internal rel = 'persons.personID']
- 'date'
- 'place'
- 'record'

「結婚」テーブルの PK インデックスは、両方の ID 列で構成されます。(*性差別用語の使用をお許しください。これは単に構造上の目的のためです。念のため、私は MySQL を初めて使用します。また、私の家族はとにかくかなり右翼で保守的ですが、実際にはそうではありません。 「問題ではなく、意味を持たないので、あなたが望むなら、配偶者 1 と配偶者 2 と見なすこともできます. 私は個人的に、同性愛嫌悪でも偏見でもありません.

だから...「結婚」のために別のテーブルを維持したい理由がわかります.各結婚には含まれなければならない独自のデータがあり、両方の配偶者のレコードで各結婚のデータを繰り返すのはばかげています. 以前は「persons」テーブルに「spouseID」列がありましたが、各配偶者の ID も手動で照合する必要があり、その列を対応する結婚列にリンクする方法がわかりませんでした (「結婚のテーブル)とにかく、私はそれを落としました。

「結婚」の両方の配偶者ID列を取得して、代わりに、または同様に人の名前を表示する方法について誰かが教えてくれたら、それは素晴らしいことです。

しかし、まず、2 つのテーブルをリンクする方法を知る必要があります (おそらく、「結婚」テーブルと統合されている「人」テーブルに「配偶者」列を含めることができます)。階層ツリー。

とても有難い。

PS ツリーはかなり広範で、6 世代にまたがっています。約 45 人の「人」がいて、16 人の結婚があったと思います。

4

3 に答える 3

1

ERDダイアグラムのコメントで私が行った提案は次のとおりです。

ERD

于 2012-12-24T22:15:07.783 に答える
1

同じテーブルに対する単純な SELECT-JOIN クエリを 2 回実行すると、すべての結婚がリストとして取得されます。

SELECT m.*,
      h.firstName as husbandFirstName, h.lastName as husbandLastName, 
      w.firstName as wifeFirstName, w.lastName as wifeLastName 
FROM marriages m
LEFT JOIN persons h ON m.husbandID = h.personID
LEFT JOIN persons w ON m.wifeID = w.personID;

男性の子供のリストについては、父親の ID を次のように渡します。

SELECT p.firstName as fatherFirstName, p.lastName as fatherLastName, 
     c.firstName as childFirstName, c.lastName as childLastName
LEFT JOIN persons c ON c.fatherID = p.personID
WHERE p.personID = $fatherID;
于 2012-12-24T12:18:14.153 に答える