2010-11-05 9 views
0

Je développe un système de gestion de documents pour mon projet de fin d'études.Conception de base de données relationnelle avec un nombre inconnu d'attributs au début

Dans ce projet, les utilisateurs ajoutent des métadonnées de documents dans ma table "documents" dans une base de données relationnelle. Et de couse, il existe différents types de documents, comme des lettres, des factures, etc. Ils ont donc un ensemble d'attributs différents pour chaque type de type de document. (et bien sûr certains attributs communs comme "author".)

Et les utilisateurs peuvent définir de nouveaux types de documents avec un nouvel ensemble d'attributs (ou ils peuvent utiliser des attributs existants qui sont précédemment définis par les utilisateurs). Et bien sûr, les utilisateurs peuvent ajouter ou supprimer des attributs après l'insertion de dizaines de documents.

La question est de savoir comment je devrais stocker ce type de données dans mon système de base de données relationnelle? (Postgres dans ce cas.)

Je fais quelques recherches, trouvé des solutions mais je ne peux pas décider quoi faire.

Dois-je avoir une table de documents de base, et pour chaque nouvel attribut ajouté, je devrais créer une table séparée (docID, valeur) et les joindre à la demande des utilisateurs? Ou dois-je créer une nouvelle table pour chaque type de document avec ses attributs définis? puis les unir à la demande des utilisateurs? Ou devrais-je créer une grande table relativly, avec disons, 200 ints, 200 varchars, 200 dates, 200 flotteurs etc. et les définitions de carte à ces colonnes pour chaque type de document.

En tant qu'exigence initiale, l'utilisateur devrait pouvoir commander, filtrer (rechercher) des documents pour obtenir des rapports de quelque sorte que ce soit. Et ces documents et leurs attributs auront des droits d'accès, je veux dire, ils auront des relations avec d'autres tables dans ma base de données.

Ma principale considération ici n'est pas la facilité de développement. Les performances et les exigences fonctionnelles sont les plus importantes. Parce que, dans ma démonstration, je devrais avoir une base de données avec au moins 1 million de documents déjà insérés.

Je peux fournir plus d'informations si demandé.

Merci.

Répondre

1

Une table stocke les documents.

Une table stocke les métadonnées (ID document, clé, valeur). Une jointure vous procure un document et toutes ses métadonnées.

+0

Voir aussi cette question. http://stackoverflow.com/questions/1309616/store-objects-in-database –

+0

Lisez également à ce sujet: http://en.wikipedia.org/wiki/Entity-attribute-value_model –

+0

Et encore une autre référence pour soutenir cette answer: http://www.learn.geekinterview.com/it/data-modeling/entity-attribute-value-eav-.html –

Questions connexes