你可能会从那里获得灵感。
关于您的评论:
至于数据库结构,你可以试试这种结构(MySQL sql):
CREATE TABLE `Users` (
`UserID` INT NOT NULL AUTO_INCREMENT
, `UserName` CHAR(50) NOT NULL
, `UserLogin` CHAR(20) NOT NULL
, PRIMARY KEY (`UserID`)
);
CREATE TABLE `Groups` (
`GroupID` INT NOT NULL AUTO_INCREMENT
, `GroupName` CHAR(20) NOT NULL
, PRIMARY KEY (`GroupID`)
);
CREATE TABLE `Documents` (
`DocID` INT NOT NULL AUTO_INCREMENT
, `GroupID` INT NOT NULL
, `DocName` CHAR(50) NOT NULL
, `DocDateCreated` DATETIME NOT NULL
, PRIMARY KEY (`DocID`)
, INDEX (`GroupID`)
, CONSTRAINT `FK_Documents_1` FOREIGN KEY (`GroupID`)
REFERENCES `Groups` (`GroupID`)
);
CREATE TABLE `Revisions` (
`RevID` INT NOT NULL AUTO_INCREMENT
, `DocID` INT
, `RevUserFileName` CHAR(30) NOT NULL
, `RevServerFilePath` CHAR(255) NOT NULL
, `RevDateUpload` DATETIME NOT NULL
, `RevAccepted` BOOLEAN NOT NULL
, PRIMARY KEY (`RevID`)
, INDEX (`DocID`)
, CONSTRAINT `FK_Revisions_1` FOREIGN KEY (`DocID`)
REFERENCES `Documents` (`DocID`)
);
CREATE TABLE `M2M_UserRev` (
`UserID` INT NOT NULL
, `RevID` INT NOT NULL
, INDEX (`UserID`)
, CONSTRAINT `FK_M2M_UserRev_1` FOREIGN KEY (`UserID`)
REFERENCES `Users` (`UserID`)
, INDEX (`RevID`)
, CONSTRAINT `FK_M2M_UserRev_2` FOREIGN KEY (`RevID`)
REFERENCES `Revisions` (`RevID`)
);
文档是一个逻辑容器,修订包含指向文件的实际链接。每当有人更新新文件时,请在每个表中创建一个条目,“修订版”中的条目包含指向“文档”中插入的条目的链接。
表格M2M_UserRev允许将多个用户与文档的每个修订版本相关联。
更新文档时,仅在“修订”中插入,并带有指向相应文档的链接。若要知道要链接到哪个文档,可以使用命名约定,或要求用户选择正确的文档。
对于文件的文件系统架构,这真的无关紧要。我只是在将文件存储在服务器上之前将其重命名为唯一文件,并将用户名保留在数据库中。只需将重命名的文件存储在任意位置的文件夹中,并将其路径保留在数据库中即可。这样,您就可以在用户要求时如何重命名它。如果您确定用户给出的原始名称是唯一的,您也可以保留它,但我不会太依赖它。您可能很快就会看到两个不同的修订版具有相同的名称,一个在文件系统上覆盖了另一个修订版。