我有一个从1到N个元素的整数列表(N <24)
目前,有两种解决方案可以在SQL数据库中管理这个值(我认为它与MySQL和Microsoft SQL Server相同)
解决方案1 :使用VARCHAR
和,
分隔整数值:
aaa | 40,50,50,10,600,200
aab | 40,50,600,200
aac | 40,50,50,10,600,200,500,1
解决方案2 :使用复合主键(key,id)创建一个新表(id =列表中元素的索引)和值:
aaa | 0 | 40
aaa | 1 | 50
aaa | 2 | 50
....
aab | 0 | 40
aab | 1 | 50
aab | 2 | 600
....
考虑到要加载许多数据项并且需要多次刷新此数据,它有什么更好的解决方案
由于
编辑: 我的操作案例是:我需要刷新/读取所有数据(密钥列表)同一个呼叫,我从来没有逐个调用,这就是为什么我认为第一种方法更好。 所有数学如avg或max我想在客户端做。
答案 0 :(得分:2)
通常第二种方法更可取。一个优点是易于访问:
-- Third value of aaa
select value from mytable where key = 'aaa' and pos = 3;
-- Avarage value of aaa
select avg(value) from mytable where key = 'aaa';
-- Avarage number of values
select avg(cnt) from (select count(*) as cnt from mytable group by key) counted;
另一个是数据一致性。您可以向列添加简单约束,例如,仅允许1到700之间的整数,最多只能放置23个。
但上述情况有例外。如果您仅使用数据库按原样存储列表,并且您不想选择单独的值甚至聚合它们,即如果这只是DBMS的字符串而您的查询并不关心它内容,然后将其存储为一个简单的字符串。为什么不呢?
答案 1 :(得分:1)
你提出的第二个解决方案是这样做的经典方法,我建议你这样做。
第一种解决方案在缩放和其他一百种方面非常糟糕