我已经制作了一个抓取工具,它在每个链接的源代码中寻找指定字符串。问题是我想存储包含特定字符串的链接。 例如:
+--------+----------------------------------------+
| String | Links |
+--------+----------------------------------------+
| Apple | example1.com example2.com example3.com |
+--------+----------------------------------------+
| Banana | example6 example1 example12124 |
+--------+----------------------------------------+
| Carrot | |
+--------+----------------------------------------+
| Melon | example2 |
+--------+----------------------------------------+
使用静态蜇而不是链接对我来说会更好。那就是因为我每天都在为刮刀添加新链接,但字符串保持不变。
当然,我可以在每一行存储完整的链接,但这是一个可怕的解决方案。你能告诉我该怎么办?我正在考虑将每个链接转换为唯一代码,例如:
example.com
至:
m!93xp
它占用的空间更少,但我认为这不是一个好主意。你觉得怎么样?
答案 0 :(得分:1)
我花了几次时间阅读以了解您的问题是什么以及您真正在问什么。规范化的结构将在多对多关系中产生3个表。
这将是重复性最低的数据,并且可能是磁盘空间上的最低成本,因为如果它们很长而不是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
)
答案 1 :(得分:0)
这是我建议的粗略草图。我没有明确定义任何主键或外键。现在是星期五下午,我准备喝啤酒了。 :)
create table Strings
(
StringID int identity
, StringValue varchar(100)
)
create table Links
(
LinkID int identity
, StringID int not null
, URL varchar(255)
)