假设我有4个表包含不同类别的数据:
Audiobooks
Music
Text
Films
每个表都包含与类别数据相关的内容,即
Films
将包含.mp4文件,Music
将包含.mp3等等。
存在一个名为Content
的额外表,它包含来自所有其他4个表的所有数据,并包含包含有关文件的额外信息的列。
如果我从Content表中提取一行,我想知道该文件的来源(它来自哪个表),无需搜索所有表并查看哪个包含该文件名或UUID(coz文件名)可能会发生冲突),而无需在Contents表中添加一个额外的列来说明该文件的表名。
我在Google和StackOverflow上搜索了类似的qns,但没有人给出了想要的答案。也许我要求的太多了。
答案 0 :(得分:1)
我不喜欢你的数据库设计。这可以通过更好的设计来解决,而不会在不同的地方重复信息。
话虽如此:您可以使用内容表中的所有ID以及对表格的引用来创建一个额外的表格:有声读物,音乐,文本或电影以及该记录所引用的该表中的ID。
为什么你需要所有这些表中的信息,为什么内容表不够?
答案 1 :(得分:0)
不改变您的数据库设计:
您可以更改存储UUID的策略,因此每个文本将以“TXT”和“Film with”MP4“等开头。这样,数据库访问对象包装器上的一些简单逻辑就像
If (UUID.substring(0,3) = "MP4") sqlQuery = SELECT * FROM Films WHERE UUID = SqlUUID
If (UUID.substring(0,3) = "TXT") sqlQuery = SELECT * FROM Text WHERE UUID = SqlUUID
等
如果您没有使用DAO包装器,那么您将不得不在SQL上编写字符串......这非常混乱。另一方面,如果Contents
表上有区分不同文件的内容,例如file extension
列,则可以进行2次查询,第一次查找哪个表应该查询。
总的来说,彼得是对的;你应该改变你的数据库设计。
我不明白为什么你不能将Content
表与其他表合并。如果输出长度有问题,只需选择相关列而不是所有内容。