Python 3+SQLite多键重复记录数据库设计方案咨询
数据库设计方案建议
你的数据示例
AB_123, a location, unique_url, some_date, a name AB_123, a location, unique_url, some_date, a name AB_123, a location, unique_url, some_date, a name AB_123, a location, unique_url, some_date, a name CD_456, a location, unique_url, some_date, a name EF_678, a location, unique_url, some_date, a name EF_678, a location, unique_url, some_date, a name EF_678, a location, unique_url, some_date, a name GH_890, a location, unique_url, some_date, a name GH_890, a location, unique_url, some_date, a name
需求梳理
- 首次做数据库项目,用Python 3 + SQLite开发,数据量约32万条
- 数据里有重复的标识键(比如
AB_123),用户通过这个键搜索,要返回所有匹配的行 - 所有字段都是字符串,优先保证代码好懂,性能不用太纠结
- 试过单表但遇到问题,知道多表可能行但搞不清,想要简洁的解决方案
优先推荐:单表设计方案
核心思路
单表是最符合你需求的选择——逻辑直观,代码简单,完全能实现按键搜索返回所有匹配行的功能,没必要搞复杂的多表关联。
表结构创建
直接建一张名为records的表,字段对应你的数据即可:
CREATE TABLE records ( key TEXT, location TEXT, unique_url TEXT, some_date TEXT, name TEXT );
可选小优化(不影响代码简洁性)
如果想让按key搜索快一点(32万条数据加个索引完全不麻烦),可以给key字段加个索引:
CREATE INDEX idx_records_key ON records(key);
Python操作示例(清晰易懂)
用Python自带的sqlite3库写搜索逻辑,代码一目了然:
import sqlite3 def get_records_by_key(target_key): # 连接数据库 conn = sqlite3.connect('your_db_name.db') cursor = conn.cursor() # 执行查询,用参数化查询避免SQL注入 cursor.execute("SELECT * FROM records WHERE key = ?", (target_key,)) # 获取所有匹配结果 all_matches = cursor.fetchall() # 关闭连接 conn.close() return all_matches # 调用例子 ab_123_records = get_records_by_key('AB_123') for row in ab_123_records: print(row)
为什么不选多表?
多表方案(比如把重复的key单独存一张主表,再建一张详情表关联)会增加代码复杂度,需要写JOIN查询,反而违背了你“代码清晰优先”的需求。单表已经能完美解决问题,完全没必要折腾多表。
内容的提问来源于stack exchange,提问作者Molly Birk
相关产品推荐
相关产品推荐

