リレーショナル データベース (MySQL) で個人データベースをモデル化する必要があります。
人にはそれぞれ特徴があります。1:1 の関係のみを持つプロパティ (例: 性別 男性/女性) と、スポーツや言語などの 1:n の関係を持つプロパティ (例: バスケットボールやフットボールをプレーし、英語とドイツ語を話す人) があります。さらに、これらの 1:n 関係にはスキル レベル (プロ、初心者など) があります。
現在、個人と特性の関係をモデル化するために、EAV モデルよりも優れたアプローチがあるかどうかを自問しています。私の主な関心事は、特別なプロパティを持つ人物のフィルタリングを容易にすることです (たとえば、男性であり、(プロとしてバスケットボールをしている、または初心者である) かつ、プロとして英語を話すすべての俳優)。新しいプロパティを簡単に追加できるようにする必要があります (これは、必ずしも完全に動的である必要はありません. 開発者がこれを行う必要があり、テーブルを変更する必要がある場合は問題ありません. しかし、それほど難しくないはずです (例: SQL ステートメントの変更、結合の追加、データベース テーブル/ルックアップ テーブルの追加)。 .
私は従来の列ベースの設計を採用し、persons テーブルの 1:1 プロパティをプロパティごとに別の列に配置します。このような設計で 1:n の関係をモデル化する最良の方法はどれかはわかりません。1:n プロパティごとにルックアップと個別のテーブルを作成することは避けたいと思います。
最良のアプローチは、次の EAV アプローチのようです。
id、name などの列を持つ Persons テーブル
1 | キリスト教徒
列 person_id、property、value、level を持つ Properties テーブル。
1 | 性別 | 男性 | 1 | スポーツ | バスケットボール | プロフェッショナル 1 | スポーツ | サッカー | 初心者 1 | 言語 | 英語 | プロフェッショナル 1 | 言語 | ドイツ語 | 基本