gpt4 book ai didi

python - 这是一个高效的 MySQL 数据库设计吗?

转载 作者:行者123 更新时间:2023-11-28 19:38:01 25 4
gpt4 key购买 nike

我正在做一个项目,其中有一组关键字 [abc, xyz, klm]`。我还有一堆内容为[1.txt, 2.txt, 3.txt]的文本文件

我正在做的是将关键字与文本文件进行碰撞,以找到关键字出现的行,并且可以多次这样做。所以我想为每次出现存储 ID(不带 .txt 的文本文件名)、Extracted_Data、Line_Number、Spwaned_Across(关键字可能分布在 2 行中)

我决定为每个关键字创建一个表来存储这些数据。

表格:abc、xyz、klm

表abc示例数据:

ID Extracted_Data                         Line_Number Spawned_Across
12 MySQL is wonderful. What is 'abc' 34 1

所以我最终为每个关键字创建了一个表格。在我的项目中,大约有 150 个关键字,并且它可以增长。所以有 150 张 table 。

我为什么选择这样做?

现在我需要查找关键字是否存在于文件中,并且我确信将来我会被要求显示它在文件中的位置或方式。我计划为每个新关键字自动创建一个表格,这样我就不必手动创建每个关键字或一个包含 100 列的巨型表格。

我做出了正确的决定吗?非常感谢您的意见。

最佳答案

不要那样做。没有针对动态表名优化的数据库库,每次您要访问表时都必须从头开始创建查询。另外,您将如何回答诸如“我在文件 12 的第 34 行找到了哪些数据”之类的问题?

您需要三个表。在 PostgreSQL 语法 [*] 中是:

CREATE TABLE source (sourceid SERIAL, filename VARCHAR NOT NULL);
CREATE TABLE keyword (keywordid SERIAL, keyword VARCHAR NOT NULL);
CREATE TABLE location (locationid SERIAL,
sourceid INTEGER NOT NULL REFERENCES source(sourceid),
keyword INTEGER NOT NULL REFERENCES keyword(keywordid),
data VARCHAR NOT NULL,
line INTEGER NOT NULL,
span INTEGER NOT NULL);

当您开始处理一个新的文本文件时,创建一个新的 source 元组并记住它的 sourceid。遇到关键字时,要么为其插入一条新记录并记住它的keywordid,要么查找旧记录。然后将该 sourceid、keywordid 和其他相关数据插入 location

回答我之前提出的问题:

SELECT * FROM
location JOIN source ON location.sourceid = source.sourceid
JOIN keyword ON location.keywordid = keyword.keywordid
WHERE
source.filename = 'foo.txt' AND
location.line = 34;

是的,以“正确”的方式做事需要更多的前期工作,但您将在性能、易于维护和易于使用结果方面获得一百万倍的返回。

[*] MySQL 的语法很相似,但我不记得了,您可以很容易地找出差异。

关于python - 这是一个高效的 MySQL 数据库设计吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6914009/

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