SQL,一块数据知道它来自哪个表

时间:2014-01-30 12:00:06

标签: mysql sql

假设我有4个表包含不同类别的数据:

Audiobooks
Music
Text 
Films

每个表都包含与类别数据相关的内容,即

Films将包含.mp4文件,Music将包含.mp3等等。

存在一个名为Content的额外表,它包含来自所有其他4个表的所有数据,并包含包含有关文件的额外信息的列。

如果我从Content表中提取一行,我想知道该文件的来源(它来自哪个表),无需搜索所有表并查看哪个包含该文件名或UUID(coz文件名)可能会发生冲突),而无需在Contents表中添加一个额外的列来说明该文件的表名。

我在Google和StackOverflow上搜索了类似的qns,但没有人给出了想要的答案。也许我要求的太多了。

2 个答案:

答案 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表与其他表合并。如果输出长度有问题,只需选择相关列而不是所有内容。