gpt4 book ai didi

sql - 如何将文件路径或URL放入数据库?

转载 作者:行者123 更新时间:2023-11-29 04:04:00 25 4
gpt4 key购买 nike

天真的方法是将整个路径作为一个字符串放入DB中,这对toy DBs有效。然而,这种方法有一些缺陷。例如,假设我在/var/www/sites/下有10万个文件,那么在DB中存储/var/www/sites 10万次是非常低效的。我相信有更好的方法来做这件事。
我只想索引DVD上的文件路径,然后搜索mp3文件或目录等。首选的RDBMS是SQLite(也许是FTS Tables?)。我的目标是学习,我知道有很多桌面搜索引擎。

最佳答案

天真的方法是将整个路径作为一个字符串放入DB中,这对toy DBs有效。然而,这种方法产生一个非规范化的数据库。
谁告诉你的?这是我很久以来听到的最可笑的事了。尽快把它们扔掉,不要为这些荒谬的“建议”付钱。
简短的回答
这就好比说,如果你把电话号码或地址以原始形式存储在数据库中,那就太天真了,没有正常化。
将您的url放在数据库的一个列中(高端或低端)。它不会破坏正常化规则。(当然,假设数据库在其他方面正常化了。)
冗长的回答
让我们看两个对位。
有些人不明白正常化是一个原则。当然,在数据库中应用这一原则时,我们有标准形式,您要么遵从标准形式,要么破坏标准形式。但这不是全部原则。你可以很容易拥有一个令人震惊的数据库,因为它不是标准化的,即使它可以在3NF。
假设您有一个Customer表,它有一组列组成“address”。还有一个Supplier表,它也有组成“address”的相同(希望完全相同)列。只要函数依赖项已经被解决,也就是说,没有什么是正常的形式,可以识别它不满足3NF或5NF。这样的数据库就可以了。但是一个好的设计师(而不是一个合格但缺乏经验的设计师)会将“address”列规范化为一个单独的地址表,并将FK放在Customer和Supplier表中。该设计器为您提供了一个更加规范化的数据库,这甚至更易于维护,但它仍然与以前一样处于3NF或5NF中。
对于新手来说,他们需要使一切正常化。他们忘记了数据库的用途,并将其正常化到超出其用途的程度。根据告诉你的人的同样推理,“地址”列和这些列的内容是“不正常的”。只要你有华盛顿大街,华盛顿大道,华盛顿巷,圣莫利,“那太天真了,数据库没有正常化”。完全是胡说八道。
对于大多数数据库来说,将街道名称和街道类型存储在一个列中就足够了。如果你有一个好的设计师,他们肯定会实现一个单独的地址表。街道名称中多次出现“华盛顿”不能说是“重复”。但如果你是市议会或电力公司,你会有一个不同的目的,在这种情况下,这是不够好的,是的,在那里你会正常化的“地址”列组到第N度,这样的“华盛顿”或“街道”永远不会重复作为一个数据值。为此,你需要一个非常有经验的设计师。只有少数人有不同的目的。
因此,如果数据库的目的是仔细分析URL的全部内容,并重建树视图或explorer样式的视图,那么无论如何,在表中构建一个目录结构,该结构允许存储URL的每个组件和层次结构,并且决不复制任何组件。但是如果你的目的只是像大多数人存储地址或电话号码那样存储url,那么只存储地址或电话号码这样的原始url。您可以执行相当合理的搜索并匹配原始URL的组成部分,以查找MP3文件或其他内容。
没有对标准的衡量,就没有“最好的”。没有一刀切的。在大多数情况下,电力公用事业数据库“太复杂”(太标准化);通常的数据库对电力公用事业来说“不充分”如果你确定了目的,你所需要的搜索类型,它确定了衡量“最好”或“更好”或“失败”的标准。
对评论的回应
你的编辑改变了环境。虽然通常的标准化水平对于大多数人来说是足够的(因此不是“天真的”),但是您需要更多的东西,您离电力公司更近,您需要一个标准化的目录结构来存储URL或完整路径,并且您需要从数据值中删除重复。等存储一次。
规范化目录
没问题。这也做了很多次。我已经在another answer中发布了确切的要求。
请放心,确切的结构运行在两个大型企业级服务器上,而且通用结构运行在我25年多编写的几乎每个SQL数据库中。它可能看起来很复杂,但一旦你把它的头,它是简单的和灵活的。允许完全递归等。
你可以在这里的评论中提问。

关于sql - 如何将文件路径或URL放入数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4842389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com