Terminologia corretta per una tabella che fornisce "colonne dinamiche"

-2

Un modello comune nella progettazione del database consiste nell'appendere le colonne dinamiche a una tabella con un design come questo:

create table MasterTable
(
    Id int not null primary key 
    , Name nvarchar(64) not null unique
    , SomeColumn2 int not null
)

create table MasterTableAdditionalColumn
(
    Id int not null primary key 
    , ColumnName nvarchar(64) not null unique   
)

create table MasterTableAdditionalColumnData
(
    Id int not null primary key
    , MasterTableId int not null foreign key references MasterTable(Id)
    , MasterTableAdditionalColumnId int not null foreign key references MasterTableAdditionalColumn(Id)
    , Value nvarchar(1024) not null
)

create unique index UK_MasterTableAdditionalColumnData_Key
    on MasterTableAdditionalColumnData 
    (
        MasterTableId
        , MasterTableAdditionalColumnId
    )

vale a dire. Un design in cui possiamo effettivamente aggiungere una nuova colonna nvarchar(1024) al nostro MasterTable in qualsiasi momento creando una nuova voce in MasterTableAdditionalColumn per il nome della colonna; e può popolare questi valori di colonne creando voci in MasterTableAdditionalColumnData con l'id della colonna appropriata ( MasterTableAdditionalColumnId ) e l'ID del record master correlato ( MasterTableId ).

Esiste un nome per questo motivo / tipo di tabella? Ho sempre usato nomi come dynamic columns o extension table , ma non ho avuto fortuna nel trovare quei termini o qualcosa di ufficiale su Google.

Aggiornamento

Un esempio di ciò a cui mi riferisco può essere visto qui: link

vale a dire. colonne Surname e JobTitle nel set di risultati ottengono i loro valori da un elenco di coppie nome-valore per ogni MasterTable record; vale a dire dalla tabella MasterTableAdditionalColumnData .

Mi chiedo quale sia il termine per una tabella come MasterTableAdditionalColumnData ; oppure questo approccio alla progettazione del modello di dati per consentire la definizione delle colonne in fase di esecuzione è

    
posta JohnLBevan 19.04.2018 - 17:06
fonte

1 risposta

4

Il modello EAV (Entity-Attribute-Value) sembra essere il termine che stavo cercando. Ecco l'argomento Wikipedia sull'argomento.

Sembra che la maggior parte delle persone sconsigli questo schema, ma come per tutto ciò che riguarda il contesto / la valutazione dei pro e dei contro per lo scenario utilizzato.

Ecco un post sul blog bilanciato con alcune discussioni aggiuntive sul pattern: link

Tabella degli attributi è una risposta altrettanto valida. Grazie a @RobertHarvey per avermi indicato in questa direzione nei commenti.

Ecco un post del blog di Martin Fowler su questo e un articolo wiki .

    
risposta data 19.04.2018 - 19:48
fonte