【发布时间】:2015-06-04 23:04:53
【问题描述】:
有人要求我从两个表中提取数据,但无法完全弄清楚,此时我有点不知所措,真的需要一些帮助。
两个表,不完全是父/子关系(至少在我有限的理解中),并且没有我看到的主键(没有设置数据库,所以如果您认为添加会有所帮助,请随意说所以)。
表 #1 具有服务器名称、共享名称、共享路径、共享所有者和权限。服务器名称、共享名称、所有者和权限可以重复。服务器名称和路径的组合是每条记录的唯一性(应该是复合键吗?)。路径可以嵌套(D:\Folder1\ 是一个路径,D:\Folder1\Folder2 也是如此;参见下面的例子)
表 #1 - 份额
Servername ShareName Path Owner Permissions
-----------------------------------------------------------------
Server01 Share01 D:\Folder1 jsmith Everyone
Server01 Share02 D:\Folder2 jsmith jsmith,ssmith
Server01 Share03 D:\Folder2\A jdoe jdoe,jsmith
Server02 Share01 E:\Folder1 ksmith ksmith,jdoe
Server03 Share01 G:\Folder1 jsmith Everyone
Server03 Share02 C:\Folder1 jsmith Everyone
表 #2 是这些服务器上列出的文件的细分。此列表还可以包括表 #1 中未列出的文件路径。每个文件记录都是唯一的,但文件名/路径/扩展名/修改日期本身不是。
表 #2 - 文件信息
Hostname Filename FolderPath FileExtension LastModified
-----------------------------------------------------------------
Server01 FileA.txt D:\Folder1 txt 1/1/1900
Server01 FileB.log D:\Folder2 log 2/1/2000
Server01 FileC.ini D:\Folder2\A ini 3/1/2001
Server02 FileD.xls E:\Folder1 xls 3/2/2010
Server03 FileE.exe G:\Folder1 exe 3/2/2011
Server03 FileF.ppt C:\Folder1 ppt 5/10/1998
从这两个中,我希望能够从两者中查询和获取信息。例如,对于表 #1 中列出的每个路径,表 #2 中该路径的所有文件的最早 LastModified 日期是什么。
表 #1 中有大约 160k 行,表 #2 中有 1.1 亿行,所以我不确定这是否会强制采用任何特定方法?
【问题讨论】:
-
就约束而言,SQL“主键”只是“唯一非空”的同义词(意味着超级键)。包含唯一组合的列的任何组合也是唯一的。由于 Path 是唯一的,它本身就是一个候选键。 (假设没有空的超级键。)虽然您说 (Filename, FolderPath, FileExtension, LastModified) 不是唯一的,但每一行都是唯一的,但这不足以确定 FileInfo 的候选键(不可约的超级键)。
标签: sql-server database sql-server-2008-r2