Ich habe eine Tabelle mit Leuten, die ziemlich normal sind, z. :Speichern von Suchsätzen basierend auf mehreren Bedingungen
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
Diese Tabelle enthält alle Felder, die allen Kontakten gemeinsam sind. Jedoch habe ich einige "Typen" von Kontakten, die ein Feld haben können oder nicht, das nur für diese Art von Kontakt spezifisch ist. Wenn der Datensatz beispielsweise "ContactType = 'student'" hat, möchte ich ein zusätzliches Feld namens "studentid" speichern. Es gibt viele verschiedene Arten von Kontakten mit jeweils leicht unterschiedlichen Feldanforderungen. Um dieser Situation zu irgendeinem Zeitpunkt in der Zukunft hinzuzufügen, können für jeden Kontakttyp zusätzliche Felder hinzugefügt werden.
Wenn ich jedes Feld zur Tabelle Kontakte hinzufüge, würde ich am Ende mit vielen Feldern, die nicht für 99% der Datensätze benötigt werden. So plane ich auf eine zweite Tabelle wie folgt zu erstellen:
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
Für jedes zusätzliche Feld i fügen Sie einfach einen Datensatz in dieser Tabelle mit dem Namen und den Wert für das Feld. Ich kann Code verwenden diese Informationen zu ziehen usw.
Meine Frage ist
Ist dies der beste Ansatz, wie ich einer anderen Art und Weise ratlos bin anders als eine große Tabelle mit jedem einzelnen Feld. Mit diesem Ansatz ist es möglich, komplexe Abfragen in vielen der Immobilienfelder durchzuführen und wenn ja wie? z.B. wie würde ich alle studenten auf dem "IT" kurs mit einem "Durchschnitt" von 10 aufzählen whos "vorname" beginnt mit "D"?
Da Sie nicht MySQL verwenden, haben Sie eine gute Chance, dass diese Joins auch eine gute Leistung haben. – AndreKR
Danke für die Antwort, die abläuft, um EAV-Strukturen nachzuschlagen. – Jammy