私は人のテーブルを持っています。 :複数の条件に基づいて検索レコードを保存する
CREATE TABLE [Contact](
[ContactID] [bigint] IDENTITY(1,1) NOT NULL,
[ContactType] [nvarchar](50) NULL,
[Forename] [nvarchar](60) NULL,
[Surname] [nvarchar](60) NULL,
[Company] [nvarchar](60) NULL
}
Example Data :
01, "Student", "Bob", "Smith", Blank
02, "Staff", "Robert", "Smithe", "Roberts And Sons"
Etc
この表には、すべての連絡先に共通するすべてのフィールドが含まれています。しかし、私はいくつかの "タイプ"の連絡先を持っている場合とそうでない場合があります。たとえば、レコードに "ContactType = 'student'"がある場合、私は "studentid"という余分なフィールドを保存します。わずかに異なるフィールド要件を持つ多くの異なるタイプの連絡先がそれぞれあります。将来、このような状況に追加するには、各連絡先タイプに追加のフィールドが追加される可能性があります。
連絡先表に各フィールドを追加すると、99%のレコードには必要ない多くのフィールドが表示されます。私は、フィールドの名前と値で、このテーブルにレコードを追加し、余分な各フィールドについて
CREATE TABLE [ContactMetaData](
[ContactID] [bigint] NOT NULL,
[PropName] [nvarchar](200) NOT NULL,
[PropData] [nvarchar](200) NULL
)
Example Data:
01, "StudentID", ""
01, "CourseName", "IT"
01, "Average", "10"
02, "Ranking", "22"
02, "ProductTypes", "IT Equipment"
ETC
:だから私はこのような第二のテーブルを作成する上で計画していました。私は、私の質問は
ある
などの情報をプルアップするためのコードを使用することができ、私はすべての単一のフィールドを持つ巨大なテーブル以外の別の方法の困惑として最善のアプローチこれです。このアプローチを考えると、プロパティフィールドの多くに複雑なクエリーを実行することが可能です。例えばどのように私は "D"で始まる "forename"の10の "平均" 10の "IT"コースのすべての学生をリストするでしょうか?
MySQLを使用していないので、これらの結合のパフォーマンスも良い可能性があります。 – AndreKR
EAV構造を調べるために応答が途切れてしまったことに感謝します。 – Jammy