草庐IT

mysql - 批评我的 MySQL 数据库设计无限动态字段

coder 2023-10-16 原文

为“构建您自己的表单”风格的网站寻找可扩展、灵活且快速的数据库设计 - 例如 Wufoo .

规则:

  1. 用户只能构建 1 个表单
  2. 用户可以创建自己的字段或从“标准”字段中进行选择
  3. 用户 1 的表单有用户想要的字段数
  4. 值可以是另一个值的兄弟值,例如照片值可以将名称、位置、宽度、高度作为兄弟值

特殊规则:

  1. 用户每天最多可以提交 5 次表单
  2. 值的日期很重要
  3. 报告值的灵 active (针对单个用户、跨所有用户、1 个字段、多个字段)非常重要 - 数据可视化(大多数将按时间顺序排列,例如所有用户 2009 年 7 月的所有照片)。

表“用户”

用户标识符

表“field_user” - 将字段分配给用户表单

发现

用户标识符

weight - int - 用于对用户表单上的字段进行排序

表“字段”

发现

creator_uid - int - “创建者”字段

标签 - varchar - 例如邮箱

value_type - varchar - 用于确定“值”表中的哪个字段将被填充(例如,如果为“int”,则该字段的值将向 values.type_int 字段提交数据 - 并且所有其他 .type_x 字段将为 NULL)。

field_type - varchar - 例如'email' - 用于特殊情况,例如验证规则

表“值”

视频

父视频

发现

用户标识符

日期 - 日期

date_group - int - 值 1-5(用户每天最多可以提交 5 个表单)

type_varchar - varchar

type_text - 文本

type_int - 整数

type_float - float

type_bool - bool

type_date - 日期

type_timestamp - 时间戳

我知道这种方法意味着“值”表中的记录将只有 1 条数据和其他包含 NULL 的 .type_x 字段......但根据我的理解,这种设计将是“最快”的解决方案(更少的查询, 少连接表)

最佳答案

OSCON昨天,Josh Berkus 给出了一个关于数据库设计的很好的教程,他花了很大一部分时间无情地撕毁了这样的“EAV”il 表;您应该很快就能在 OSCON 网站上找到他的幻灯片,并最终可以在线找到他整个教程的录音(后者可能需要一段时间)。

每个属性都需要一个连接(values 表的多个实例,您正在获取或更新的每个属性一个)所以我不知道您所说的“较少连接表”是什么意思”。连接同一个表的多个实例并不是一个特别快的操作,而且您的设计使索引几乎不可行且不可用。

至少作为一个小的改进,为您的属性值使用每个类型的单独表(也许某些索引可能适用于这种情况,尽管 MySQL 限制每个表每个查询一个索引,即使这有点可疑)。

关于mysql - 批评我的 MySQL 数据库设计无限动态字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1159932/

有关mysql - 批评我的 MySQL 数据库设计无限动态字段的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  3. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  4. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  5. ruby-on-rails - 在 Rails 和 ActiveRecord 中查询时忽略某些字段 - 2

    我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr

  6. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  7. ruby - 我可以将我的 README.textile 以正确的格式放入我的 RDoc 中吗? - 2

    我喜欢使用Textile或Markdown为我的项目编写自述文件,但是当我生成RDoc时,自述文件被解释为RDoc并且看起来非常糟糕。有没有办法让RDoc通过RedCloth或BlueCloth而不是它自己的格式化程序运行文件?它可以配置为自动检测文件后缀的格式吗?(例如README.textile通过RedCloth运行,但README.mdown通过BlueCloth运行) 最佳答案 使用YARD直接代替RDoc将允许您包含Textile或Markdown文件,只要它们的文件后缀是合理的。我经常使用类似于以下Rake任务的东西:

  8. jquery - 我的 jquery AJAX POST 请求无需发送 Authenticity Token (Rails) - 2

    rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送

  9. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  10. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

随机推荐