mysql - 如何存储具有多个 url 的数据

标签 mysql sql sql-server database

我制作了一个抓取工具,它在每个链接的源代码中寻找指定的字符串。问题是我想存储哪个链接包含特定字符串。 例如:

+--------+----------------------------------------+
| String | Links                                  |
+--------+----------------------------------------+
| Apple  | example1.com example2.com example3.com |
+--------+----------------------------------------+
| Banana | example6 example1 example12124         |
+--------+----------------------------------------+
| Carrot |                                        |
+--------+----------------------------------------+
| Melon  | example2                               |
+--------+----------------------------------------+

对我来说,使用静态刺痛而不是链接会更好。那是因为我每天都会向抓取工具添加新链接,但字符串保持不变。

当然,我可以在每一行中存储完整的链接,但这是一个可怕的解决方案。你能告诉我我该怎么办吗?我正在考虑将每个链接转换为独特的代码,例如来自:

example.com 到: m!93xp

它占用的空间更少,但我仍然认为这不是一个好主意。你觉得怎么样?

最佳答案

我花了几次时间才了解您的问题是什么以及您真正要问的是什么。规范化的结构将产生 3 个具有多对多关系的表。

  • 链接表,存储自动生成的主键的完整链接
  • 将字符串存储到自动生成的主键的字符串表
  • 存储 LinkId、StringId 和自动生成的主键的 Occurrences 表。

这将是重复性最低的数据,并且可能是磁盘空间成本最低的,因为如果字符串或链接很长,而是 4 或 8 字节整数,则不会重复它们。请注意,几乎所有现代数据库服务器都有处理和自动生成数字键的方法,您应该让他们这样做,而不是尝试生成您自己的唯一代码!

类似这样的事情:

create table Strings
(
    StringID INT IDENTITY(1,1) NOT NULL PRIMARY KEY
    , StringValue VARCHAR(100) NOT NULL
)

create table Links
(
    LinkID INT IDENTITY(1,1) NOT NULL PRIMARY KEY
    ,Link VARCHAR(255) NOT NULL
)

CREATE TABLE Occurences
(
    OccurenceId INT IDENTITY(1,1) NOT NULL PRIMARY KEY
    ,StringId INT NOT NULL
    ,LinkId INT NOT NULL
)

关于mysql - 如何存储具有多个 url 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38926899/

相关文章:

mysql合并两个varchar列删除重复的单词

mysql - 带计数条件的sql选择

c# - DataBinding 相对于手动查询/添加到控件的优势

sql - 多次选择 top( x )

C# 在 mysql 中插入复选框的值而不使用 checklistbox

sql - 仅匹配 JOIN 中存在许多行的特定行

sql - 简单的SQL问题(MySQL)

mysql - 如何在日期链表上创建唯一键

sql server select 与 like 连接?

mysql - 为避免打字错误,如何让 MySql sql 编译器在创建新过程时检查表定义?