Comment pivoter une base de données MySQL entité-attribut-valeur de schéma

J'ai besoin de concevoir des tableaux qui stocke toutes les métadonnées des fichiers (c'est à dire, nom de fichier, auteur, titre, date de création), et des métadonnées personnalisées (qui a été ajouté aux fichiers par les utilisateurs, par exemple CustUseBy, CustSendBy). Le nombre de champs de métadonnées personnalisés ne peuvent pas être définies à l'avance. En effet, le seul moyen de déterminer quels et combien de balises personnalisées ont été ajoutés sur les fichiers est d'examiner ce qui existe dans les tableaux.

Pour stocker cela, j'ai créé une table de base (avoir tous les métadonnées des fichiers), un Attributes table (la tenue des attributs supplémentaires facultatifs qui peuvent être définies sur les fichiers) et un FileAttributes table (qui attribue une valeur à un attribut d'un fichier).

CREAT TABLE FileBase (
    id VARCHAR(32) PRIMARY KEY,
    name VARCHAR(255) UNIQUE NOT NULL,
    title VARCHAR(255),
    author VARCHAR(255),
    created DATETIME NOT NULL,
) Engine=InnoDB;

CREATE TABLE Attributes (
    id VARCHAR(32) PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    type VARCHAR(255) NOT NULL
) Engine=InnoDB;

CREATE TABLE FileAttributes (
    sNo INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    fileId VARCHAR(32) NOT NULL,
    attributeId VARCHAR(32) NOT NULL,
    attributeValue VARCHAR(255) NOT NULL,
    FOREIGN KEY fileId REFERENCES FileBase (id),
    FOREIGN KEY attributeId REFERENCES Attributes (id)
 ) Engine=InnoDB;

Des données de l'échantillon:

INSERT INTO FileBase
(id,      title,  author,  name,        created)
  VALUES
('F001', 'Dox',   'vinay', 'story.dox', '2009/01/02 15:04:05'),
('F002', 'Excel', 'Ajay',  'data.xls',  '2009/02/03 01:02:03');

INSERT INTO Attributes
(id,      name,            type)
  VALUES
('A001', 'CustomeAttt1',  'Varchar(40)'),
('A002', 'CustomUseDate', 'Datetime');

INSERT INTO FileAttributes 
(fileId, attributeId, attributeValue)
  VALUES
('F001', 'A001',      'Akash'),
('F001', 'A002',      '2009/03/02');

Maintenant, le problème c'est que je veux afficher les données d'une manière comme ceci:

FileId, Title, Author, CustomAttri1, CustomAttr2, ...
F001    Dox    vinay   Akash         2009/03/02   ...
F002    Excel  Ajay     

Ce que la requête va générer ce résultat?

  • Quel langage de programmation comptez-vous utiliser?
  • MYSQL , je suis de la planification pour obtenir le résultat souhaité par Requête MYSQL et ensuite rejoindre ce résultat à d'autres tables et passer le désiré resultto FrontEnd.
  • MySQL n'est pas un langage de programmation...
InformationsquelleAutor | 2009-03-16