我正在研究mysql数据库,想知道这两个表结构中哪个在性能方面更好。

结构1;有很多共同领域的两个表

table1(file)   : id, userid, parentid, name, desc, tags, public, dateadded, datemodified, linkid, domain, url, snapshot
table2(folder): id, userid, parentid, name, desc, tags, public, dateadded, datemodified, hasSubFolders, noOfItems, noOfViews


结构2;三个表,所有公共字段放在不同的表中

table1(main)   : id, userid, parentid, objectid, objecttype(file or folder), name, desc, tags, public, dateadded, datemodified
table2(file)   : id (objectid), linkid, domain, url, snapshot
table3(folder) : id (objectid), hasSubFolders, noOfItems, noOfViews

最佳答案

我不会使用它们,而是使用类似于第一个示例的东西。在两个表中有很多公共列。因此,仅对于清单命令(UNIX中的ls,Windows中的dir),就必须访问两个表。
另外,在列名中也有对数据类型的提示,这是一种不好的做法:

而是使用一个表:fsys_entries:

id, is_directory, parentid, name, desc, tags, public, added, modified, linkid, url, snapshot


通过这种结构,可以在文件中创建文件和目录,但是不受代码问题的限制。

编辑:在真实的文件系统中,目录是带有目录标志的文件。因此,从这个角度看,它还不错,并且与真实文件系统相比,它可以提供更相似的处理。

附注:作为一项高级功能,我会将共享信息(文件/目录是否公开?链接指向的是什么?)存储在不同的表中(这只是最佳做法)。

10-07 17:27