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.
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 eav (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: