Comment stocker une table de données (ou une liste, ou un dictionnaire) dans la base de données?

en fonction du cadre D'Entity et de la base de données PostgreSQL, nous essayons de modéliser une partie de données qui consiste essentiellement en une liste de références à un objet appelé OtherObject qui a un ID. Les données que nous essayons de stocker sont un MyObject et se compose d'un Id , et deux listes (avec une longueur maximale de 12) d'une ou plusieurs références à la OtherObject et la quantité de OtherObject S. Nous voulons donc stocker des données (par exemple dans une table et des colonnes séparées) qui correspondent à ceci:

FirstPattern:
OtherObject with ID 1, 10 times
OtherObject with ID 4, 12 times

SecondPattern:
OtherObject with ID 2, 2 times
OtherObject with ID 3, 4 times
OtherObject with ID 4, 11 times

pour ce faire, nous avons pensé qu'un ICollection de KeyValuePair s serait approprié. De cette façon, nous avons une liste qui a une valeur (un montant) pour chaque Touche (la OtherObject ).

Le modèle nows est à peu près comme suit:

public class MyObject
{
    public int Id { get; set; }
    public IDictionary<OtherObject, int> FirstPattern { get; set; }
    public IDictionary<OtherObject, int> SecondPattern { get; set; }
}

la question Est, Comment Pouvons-nous stocker ce ICollection de KeyValuePair dans la base de données? On se demande aussi si c'est la meilleure façon de le faire.

nous espérons l'entendre si vous avez une (meilleure) façon de stocker ces données dans une base de données! Merci pour votre attention.

2
demandé sur Erwin Rooijakkers 2014-11-21 18:51:25

1 réponses

il existe deux types spécialement adaptés pour stocker dictionnaires dans son ensemble: hstore et json - ou le plus souvent supérieur jsonb en Postgres 9.4+.

Postgres a également un type de données dédié xml (as mentionné dans les commentaires de DJ KRAZE ), mais je préfère choisir l'une des trois anciennes options. XML est comparativement verbeux et plus complexe (pour ne pas dire alambiqué) et peut être exagéré pour votre but.

si tout ce que vous voulez de la base de données est de stocker et de récupérer l'ensemble du dictionnaire, ce sont de bonnes options.

Détails et liens dans cette réponse relative à dba.SE:

vous trouverez également des discussions approfondies sur les avantages et les inconvénients du stockage (entity-attribut-value) dans des bases de données relationnelles.

si vous voulez d'autres choses de la base de données, comme l'intégrité relationnelle, des clés étrangères ou diverses autres contraintes, un accès facile à des valeurs individuelles, taille de stockage minimale, index simples, etc. Je suggérez un ou plusieurs tableaux avec des colonnes dédiées ( normalisé ).

disposition normalisée de la table

D'après ce que j'ai compris," MyObject "( m ) contient une collection de références à" OtherObject "( o ). Chaque m est lié à (24) o et chaque o est lié à 0-n m - qui peut être mis en œuvre dans une relation classique n:M. Voici des instructions détaillées:

2
répondu Erwin Brandstetter 2017-05-23 11:46:46