【问题标题】:Insert column in existing table在现有表中插入列
【发布时间】:2016-09-22 15:24:05
【问题描述】:

我想知道网站上的用户是否可以在表格中插入列。

我的情况是:管理员想每年定义一个表结构。然后管理员希望用户将数据插入到该表中。

例如在网站上它可能看起来像这样: 在稍后阶段,管理员想在表中添加一个额外的列,但要保持数据完整。表格现在看起来像这样:

您如何适应此功能?我正在考虑创建一个包含许多隐藏字段的模型,管理员稍后可以“取消隐藏”并命名,但我不确定这是最佳实践:)。

任何可以解决此问题的想法将不胜感激! (我正在使用 ruby​​ on rails 进行编码,但我认为这种语言在这种情况下并不特别相关)

OXp1845

【问题讨论】:

  • 查看 ALTER TABLE 命令的文档:dev.mysql.com/doc/refman/5.7/en/alter-table.html
  • 不确定这是否可行。用户将在网站上添加其他列
  • 从您的问题来看,尚不清楚是管理员还是用户添加了列?首先,您询问用户是否可以添加列 - 后来您说是管理员来做。可以添加该列,而其余内容保持不变 - 根据您网站的设计,页面将需要显示其他列并允许用户输入数据。
  • 不知道为什么我对这个问题投了反对票。好像有点刺耳。
  • 不是我——我也想知道为什么——即使对我来说有点不清楚,这似乎是一个非常合理的问题。

标签: mysql ruby-on-rails ruby database


【解决方案1】:

我不建议插入列,而是使用垂直属性表。例如。

admin_tables       
| id | year or any other descriptor you want |
  1    2015
  2    2016 

admin_table_columns
| id | admin_table_id | named_column |
  1         1             name
  2         1             description
  3         1             info1
  4         1             info2 
  5         2             name 
  6         2             description
  7         2             info1
  8         2             info2 
  9         2             info3

user_inputs 
| id | user_id| admin_table_column_id | data |
  1      1              1               input for name
  2      1              2               input for description
  3      1              4               input for info2 
     .....           

这将允许管理员在不改变现有数据或动态插入新列的情况下向“表”添加任意数量的属性,模型可以定义为:

class AdminTable < ActiveRecord::Base
   has_many :admin_table_columns
   has_many :user_inputs, through: : :admin_table_columns
end 

class AdminTableColumn < ActiveRecord::Base
   belongs_to :admin_table
   has_many :user_inputs
end

class UserInput < ActiveRecord::Base
   belongs_to :admin_table_column
   belongs_to :user
end

显然这是一个简化的示例,但我认为它应该让您走上正轨。

【讨论】:

  • 我认为这是正确的方法。感谢您的详细描述
猜你喜欢
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-08
  • 2014-07-09
  • 1970-01-01
  • 2021-12-03
  • 2018-05-06
相关资源
最近更新 更多