【发布时间】:2023-04-02 15:35:01
【问题描述】:
我正在设计一个程序,用户可以在数千(或可能数百万)人中做出单一选择。我想到了两种将其存储在数据库中的方法: 1) 每个条目单独一行 2) 一个长文本,只是为新人附加一个选择或修改一个现有人的选择。
我想每个条目的单独行应该更有效,但如果我们谈论的是,比如说,数十万个条目,那么我正在寻找的网络开销是多少?只返回一个长文本并使用用户的 cpu 解析文本?
例如,单个长文本可能类似于:
Data
[Person A:Choice A][Person B: Choice A][Person C: Choice C]...[Person n:Choice n]
而多行显然是:
Person Choice
A A
B A
C C
....
n n
也许我一开始就没有以正确的方式思考这个问题。有没有更有效的方法来做这样的事情?
感谢您的意见。
【问题讨论】:
-
表每次。表
Person,表Choice,表PersonChoice包含每个相应表的ID,显示所做的选择。可索引、可搜索、灵活。 -
我想我还应该补充一点,用户将能够查看他/她对每个人所做选择的总体统计信息,因此无论如何我都必须访问用户的所有选择。在这种情况下,你还会推荐这些桌子吗?
-
当然,在 SQL 的文本列中隐藏数据是一个非常糟糕的主意。要保存 1000 行,也许调查选择组,以减少行?很快就会有人出现,并且比我更简洁地提出这个论点!
-
我想肯定比你说的要多。用户不可能对 数百万 人进行选择,除非他们以某种方式分组。在这种情况下,您可以查看进一步分解结构
Person --> Group --> Choice1 | Choice2 etc。否则我会建议桌子,它更灵活。如果您真的担心性能,您可以设置一个夜间作业将您的主表格式化为长字符串,但这只有在您的数据不是很可变的情况下才真正起作用。 -
谢谢 -- 我故意没有提供所有细节,但提供的信息对我来说已经足够了,根据你所说的,再加上一些谷歌搜索。
标签: sql database-design