Cette question est une tentative de trouver une solution pratique pour this question.Schema less Table de base de données SQL - compromis pratique
J'ai besoin d'une conception de semi-schéma moins pour ma base de données SQL. Cependant, je peux limiter la flexibilité pour l'inclure dans l'ensemble du paradigme SQL. Passer à des bases de données moins de schéma pourrait être une option à l'avenir mais maintenant, je suis coincé avec SQL.
J'ai une table dans une base de données SQL (appelons-la Foo
). Quand une ligne est ajoutée à ceci, elle doit être capable de stocker un nombre arbitraire de champs "meta" avec ceci. Un exemple serait la possibilité de joindre des métadonnées arbitraires comme des balises, des collaborateurs, etc. Tous les champs sont optionnels mais le problème est qu'ils sont de types différents. Certains pourraient être numériques, certains pourraient être textuel, etc.
Une conception simple reliant Foo
à une table de OptionalValues
avec des champs comme name
, value_type
, value_string
, value_int
, etc. value_date
semble directe bien qu'il descend dans l'ensemble du modèle qui EAV Alex mentionne sur cette dernière réponse et il semble tout à fait inutile. Aussi, j'imagine que les requêtes sur ce sujet quand il se développeront seront assez lentes. Je ne m'attends pas à chercher ou trier par quoi que ce soit dans ce tableau. Tout ce dont j'ai besoin, c'est que lorsque je reçois une ligne sur Foo
, ces attributs supplémentaires doivent également pouvoir être obtenus.
Existe-t-il des bonnes pratiques pour implémenter ce type de configuration dans une base de données SQL ou est-ce que je ne fais que regarder le tout à tort?
Souhaitez-vous un SGBD particulier ou souhaitez-vous conserver ce générique? –
J'utilise 'mySQL' en ce moment, donc au moins pour l'instant, s'il y a une bonne solution qui dépend de mySQL, ça va. –
Est-ce que cette métadonnée est simplement une brique de données de sorte que vous n'aurez jamais besoin de filtrer pour un attribut de métadonnées spécifique ni besoin de placer un attribut de métadonnées spécifique à un endroit spécifique sur un rapport ni d'agréger l'analyse sur des attributs de métadonnées spécifiques mais à la place serait seulement utilisé à des fins informatives pour cracher la liasse de métadonnées pour une valeur donnée? – Thomas