リレーショナルデータベース(MySQL)で人物データベースをモデル化する必要があります。EAVへの代替データベース設計
各個人にはプロパティがあります。 1対1の関係(例えば男性/女性)、スポーツや言語(例えば、バスケットボールやフットボールをし、英語とドイツ語を話すなど)のような1対1の関係を有するプロパティが存在する。加えて、これらの1:n関係にはスキルレベルがあります(例:プロフェッショナル、初心者)。
現在、人と特性の関係をモデル化するEAVモデルよりも優れたアプローチがあるかどうかを尋ねています。私の懸念は、主に、特殊な特性を持つ人をより簡単にフィルタリングすることです(例えば、男性であり、職業的にバスケットボールを行うか、初心者であるか、プロフェッショナルで英語を話すすべての俳優)。必ずしも完全に動的である必要はありません)。これは開発者が行う必要があり、テーブルを変更する必要がある場合は問題ありませんが、難しくはありません(SQL文の変更、結合の追加、データベーステーブル/ルックアップテーブルの追加など) 。
私は古典的な列をベースにした設計で、各プロパティの個別の列のpersons表の1:1プロパティを持っています。どのような方法で1:nの関係をモデル化するのが最も良いか分かりません。デザイン:1:nプロパティごとにルックアップと別のテーブルを持つことは避けたい。
最良のアプローチは、以下のEAVアプローチであるように思われる。
列id、nameなどを持つPersonsテーブル。列を持つ
1 | Christian
Aプロパティの表は、例えばプロパティ、値、レベル、PERSON_ID:あなたが事前にデータのスキーマを知らないとき
1 | gender | male | 1 | sports | basketball | professional 1 | sports | football | beginner 1 | language | english | professional 1 | language | german | basic
*「1:nプロパティごとにルックアップと別のテーブルを使用することは避けたい」*なぜそれを避けたいのですか? –
私は2つのコンサートを持っています: – griesi
私は2つのコンサーを持っています - 私は別のテーブルを追加するたびにSQL文を変更する必要があります - 結合を追加してください - ルックアップテーブルと各属性のテーブルは、多くの1:n属性です – griesi