Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 多个整数记录或一个文本字段_Mysql - Fatal编程技术网

Mysql 多个整数记录或一个文本字段

Mysql 多个整数记录或一个文本字段,mysql,Mysql,我正在设计一个大型网站 为了防止重复投票,我将存储用户的投票userid,现在使用mysql发布在数据库im中 哪一个更好? 1-每个用户只需一行,并将所有他投票的帖子作为文本字段存储在那里。 2-每次投票有一行,并将其存储为整数 谢谢正确的方法是您的第二个选择。关系数据库擅长这方面 制作一个名为uservots的表,主键为userid和posted。这将自动防止添加重复投票。这也意味着你可以: SELECT SUM(vote) FROM uservotes WHERE postid=42;

我正在设计一个大型网站

为了防止重复投票,我将存储用户的投票userid,现在使用mysql发布在数据库im中

哪一个更好? 1-每个用户只需一行,并将所有他投票的帖子作为文本字段存储在那里。 2-每次投票有一行,并将其存储为整数


谢谢

正确的方法是您的第二个选择。关系数据库擅长这方面

制作一个名为uservots的表,主键为userid和posted。这将自动防止添加重复投票。这也意味着你可以:

SELECT SUM(vote) FROM uservotes WHERE postid=42;
不是说你会那样做。。。您可能只需将总投票数存储在帖子本身上。

注意:

基于文本的方法有可能溢出。您必须为该文本字段设置最大大小,即使如此,足够高的投票数也会超出容量,并导致代码失败。 基于文本的方法可能非常缓慢。假设我投票给100000个职位。检查我是否投票支持Post X将涉及下载这100000个Post ID,将它们解析为一个数组,并检查Post X的ID的数组。这将比从投票中选择1的索引查询慢得多,其中user_ID=X和Post_ID=Y限制为1;,它总是以几乎完全相同的速度运行:如果它被索引的话,速度非常快。如果没有,它将基本上做与基于文本的方法相同的事情,并且速度非常慢,因此索引在这里将非常重要!另外,请注意,如果您使用MySQL的LONGTEXT来避免问题1,那么每次您想要检查一次投票,您就可以传输高达4GB的数据。哎哟。
根据我的经验,您的每行投票方法实际上将更易于实现,尤其是在您熟悉SQL之后,它的可扩展性将更好,并且它的中断方式将更少。关系数据库在一定程度上变得不可行,但对于几乎所有用户来说,充分利用SQL是获得优异性能的最佳方式。

取决于您的应用程序。如果你正在设计一个大型网站,你需要考虑的效率,具体到你自己的用例。一般情况下总会有答案,但如果每分钟都有成千上万的人访问你的网站,你会加入多个表吗?您预计有多少用户?你做了多少次民意测验?你真的希望通过一个长文本字段吗?缓存是如何发挥作用的?等等等等。