我正在创建一个包含 30-50 列的表格。这些行大约有 200K。是否建议将此数据存储在单独的表中?当您有这么多列时是否存在性能问题。
我会稍微解释一下表格。我必须存储过去 10 年的所有体育比赛(篮球、棒球、足球、曲棍球)。对于其中的每一个,我都需要保留额外的数据。其中一些数据允许我在运动中重复使用字段。例如,每支球队都有主客场球队和赛事日期。
但是,对于这些比赛中的每场比赛,我还存储了一些信息,例如达到了多少次先失利、多少次三振出局和三分球。显然,此数据仅与表中的某些行有关。结果,我最终在每一行中都有很多 NULL 字段。
如有必要,我可以提供更多细节。提前感谢您提供任何一般性建议。
最佳答案
详细说明 RichardOD 的回答,在处理子类型化时通常有三个选项,您选择哪个取决于您需要对相关数据执行的操作。
第一个选项是您当前正在使用的选项:将与不同类型相关的所有列保留在一个表中,并使用标志和空值来指示给定记录的类型。这是管理子类型化的最简单方法,当您只有几种类型或不同类型差异不大时,它通常很有效。在您的情况下,类型似乎有很大差异。
第二个选项是保留一个中央表,其中包含子类型之间的所有公共(public)列,并与包含这些类型的特定于类型的详细信息的其他表具有一对一关系。
第三种选择是根本不将不同类型视为子类型,而是将所有类型的记录保存在单独的表中。因此,您在保留公共(public)数据的类型之间没有公共(public)表,并且每个表都会有一些跨表重复的列。
现在,每个选项都有它的位置。当不同类型之间没有太多差异时,您会使用第一个选项。如果您需要独立于特定类型的字段来操作公共(public)字段,则可以使用第二个选项;例如,如果您想在一个包含一般信息的大网格中列出所有体育比赛,然后让用户单击以查看该比赛的特定类型的详细信息。当类型根本不是很相关并且您只是出于方便而将它们存储在一起时,您会使用第三个选项;不同的模式,即使它共享一些字段,也不应该合并。
因此,请考虑您需要如何处理这些数据,以及它如何适合这三个选项,然后自行决定哪个是最好的。如果您不能决定,请使用有关您计划如何使用数据的详细信息更新您的问题,我或其他人应该能够为您提供更多帮助。
关于sql - mysql 列太多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1487310/
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类
我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时
我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin
我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi
我找到了这样的东西:Rails:Howtolistdatabasetables/objectsusingtheRailsconsole?这一行没问题:ActiveRecord::Base.connection.tables并返回所有表但是ActiveRecord::Base.connection.table_structure("users")产生错误:ActiveRecord::Base.connection.table_structure("projects")我认为table_structure不是Postgres方法。如何列出Postgres数据库的Rails控制台中表中的所有
Ruby中防止SQL注入(inject)的好方法是什么? 最佳答案 直接使用ruby?使用准备好的语句:require'mysql'db=Mysql.new('localhost','user','password','database')statement=db.prepare"SELECT*FROMtableWHEREfield=?"statement.execute'value'statement.fetchstatement.close 关于ruby-防止SQL注入(inject
我正在编写一个Rails应用程序,它将监视某些特定数据库的数据质量。为了做到这一点,我需要能够对这些数据库执行直接SQL查询——这当然与用于驱动Rails应用程序模型的数据库不同。简而言之,这意味着我无法使用通过ActiveRecord基础连接的技巧。我需要连接的数据库在设计时是未知的(即:我不能将它们的详细信息放在database.yaml中)。相反,我有一个模型“database_details”,用户将使用它来输入应用程序将在运行时执行查询的数据库的详细信息。因此与这些数据库的连接实际上是动态的,细节仅在运行时解析。 最佳答案
我正在使用Rails4应用程序,它需要创建大量对象以响应来自另一个系统的事件。当我调用create!时,主键列上出现非常频繁的ActiveRecord::RecordNotUnique错误(由PG::UniqueViolation引起)我的模型之一。我在SO上找到了其他答案,建议挽救异常并调用retry:beginTableName.create!(data:'here')rescueActiveRecord::RecordNotUnique=>eife.message.include?'_pkey'#Onlyretryprimarykeyviolationslog.warn"Retr
我正在尝试绕过rails配置这个极其复杂的迷宫。到目前为止,我设法在ubuntu上设置了rvm(出于某种原因,ruby在ubuntu存储库中已经过时了)。我设法建立了一个Rails项目。我希望我的测试项目使用mysql而不是mysqlite。当我尝试“rakedb:migrate”时,出现错误:“!!!缺少mysql2gem。将其添加到您的Gemfile:gem'mysql2'”当我尝试“geminstallmysql”时,出现错误,告诉我需要为安装命令提供参数。但是,参数列表很大,我不知道该选择哪些。如何通过在ubuntu上运行的rvm和mysql获取rails3?谢谢。