- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
天真的方法是将整个路径作为一个字符串放入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/
我的问题是如何在 python 中创建一个简单的数据库。我的例子是: User = { 'Name' : {'Firstname', 'Lastname'}, 'Address' : {'Street
我需要创建一个与远程数据库链接的应用程序! mysql 是最好的解决方案吗? Sqlite 是唯一的本地解决方案吗? 我使用下面的方法,我想知道它是否是最好的方法! NSString *evento
给定两台 MySQL 服务器,一台本地,一台远程。两者都有一个包含表 bohica 的数据库 foobar。本地服务器定义了用户 'myadmin'@'%' 和 'myadmin'@'localhos
我有以下灵活的搜索查询 Select {vt:code},{vt:productcode},{vw:code},{vw:productcode} from {abcd AS vt JOIN wxyz
好吧,我的电脑开始运行有点缓慢,所以我重置了 Windows,保留了我的文件。因为我的大脑还没有打开,所以我忘记事先备份我的 MySQL 数据库。我仍然拥有所有原始文件,因此我实际上仍然拥有数据库,但
如何将我的 Access 数据库 (.accdb) 转换为 SQLite 数据库 (.sqlite)? 请,任何帮助将不胜感激。 最佳答案 1)如果要转换 db 的结构,则应使用任何 DB 建模工具:
系统检查发现了一些问题: 警告:?:(mysql.W002)未为数据库连接“默认”设置 MySQL 严格模式 提示:MySQL 的严格模式通过将警告升级为错误来修复 MySQL 中的许多数据完整性问题
系统检查发现了一些问题: 警告:?:(mysql.W002)未为数据库连接“默认”设置 MySQL 严格模式 提示:MySQL 的严格模式通过将警告升级为错误来修复 MySQL 中的许多数据完整性问题
我想在相同的 phonegap 应用程序中使用 android 数据库。 更多说明: 我创建了 phonegap 应用程序,但 phonegap 应用程序不支持服务,所以我们已经在 java 中为 a
Time Tracker function clock() { var mytime = new Date(); var seconds
我需要在现有项目上实现一些事件的显示。我无法更改数据库结构。 在我的 Controller 中,我(从 ajax 请求)传递了一个时间戳,并且我需要显示之前的 8 个事件。因此,如果时间戳是(转换后)
我有一个可以收集和显示各种测量值的产品(不会详细介绍)。正如人们所期望的那样,显示部分是一个数据库+建立在其之上的网站(使用 Symfony)。 但是,我们可能还会创建一个 API 来向第三方公开数据
我们将 SQL Server 从 Azure VM 迁移到 Azure SQL 数据库。 Azure VM 为 DS2_V2、2 核、7GB RAM、最大 6400 IOPS Azure SQL 数据
我正在开发一个使用 MongoDB 数据库的程序,但我想问在通过 Java 执行 SQL 时是否可以使用内部数据库进行测试,例如 H2? 最佳答案 你可以尝试使用Testcontainers Test
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭 9 年前。 此问题似乎与 a specific programming problem, a sof
我正在尝试使用 MSI 身份验证(无需用户名和密码)从 Azure 机器学习服务连接 Azure SQL 数据库。 我正在尝试在 Azure 机器学习服务上建立机器学习模型,目的是我需要数据,这就是我
我在我的 MySQL 数据库中使用这个查询来查找 my_column 不为空的所有行: SELECT * FROM my_table WHERE my_column != ""; 不幸的是,许多行在
我有那个基地:http://sqlfiddle.com/#!2/e5a24/2这是 WordPress 默认模式的简写。我已经删除了该示例不需要的字段。 如您所见,我的结果是“类别 1”的两倍。我喜欢
我有一张这样的 table : mysql> select * from users; +--------+----------+------------+-----------+ | userid
我有表: CREATE TABLE IF NOT EXISTS `category` ( `id` int(11) NOT NULL, `name` varchar(255) NOT NULL
我是一名优秀的程序员,十分优秀!