我正在研究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
通过这种结构,可以在文件中创建文件和目录,但是不受代码问题的限制。
编辑:在真实的文件系统中,目录是带有目录标志的文件。因此,从这个角度看,它还不错,并且与真实文件系统相比,它可以提供更相似的处理。
附注:作为一项高级功能,我会将共享信息(文件/目录是否公开?链接指向的是什么?)存储在不同的表中(这只是最佳做法)。