我需要设计一些表来存储文件的所有元数据(例如文件名、作者、标题、创建日期)以及用户添加的自定义元数据(例如CustUseBy、CustSendBy等)。自定义元数据字段的数量不能事先确定。实际上,确定哪些自定义标签已经添加到文件中,以及有多少自定义标签已经添加到文件中的唯一方法是检查表中存在什么。
为了存储这些信息,我创建了一个基本表(包含文件的所有公共元数据),一个“属性”表(保存可以在文件上设置的其他可选属性)和一个“文件属性”表(为文件分配属性值)。
为了存储这些信息,我创建了一个基本表(包含文件的所有公共元数据),一个“属性”表(保存可以在文件上设置的其他可选属性)和一个“文件属性”表(为文件分配属性值)。
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;
样本数据:
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');
现在的问题是我想以这样的方式展示数据:
FileId, Title, Author, CustomAttri1, CustomAttr2, ...
F001 Dox vinay Akash 2009/03/02 ...
F002 Excel Ajay
哪个查询会生成这个结果?