【问题标题】:What are some solutions for altering a table's column for storing multiple values?有哪些解决方案可以更改表的列以存储多个值?
【发布时间】:2012-07-15 23:49:57
【问题描述】:

我们有一张桌子:

message (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`subject` VARCHAR(255) NOT NULL DEFAULT '',
`message` TEXT NOT NULL,
`attachment` VARCHAR(255) NULL DEFAULT NULL,
`new` TINYINT(4) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
)

现在我们需要多个附件
目前只保存一个附件链接。一种解决方案可能是在列中添加另一个外键表使用逗号分隔值。但是我们需要一个更好的解决方案,它可以使用旧系统和新系统,而不需要太多改动。有什么建议吗?

【问题讨论】:

    标签: mysql sql database-design data-modeling


    【解决方案1】:

    正如@BurhanKhalid 所说,任何解决方案都需要更改您的应用程序。您应该做正确的事并使用带有外键的单独attachments 表来规范化您的数据。 要支持旧版应用程序,请将原始表中的 attachment 列单独保留,然后创建一个触发器以使用添加到新的规范化表中的第一个附件链接来填充它。从长远来看,您希望修复旧版应用以使用新表,然后弃用旧列。

    【讨论】:

      【解决方案2】:

      首先,更改您的表格,使 attachment 的类型为 TEXT,然后序列化您的附件(例如,作为 json 或 xml)并将它们放入 attachment 列中。

      【讨论】:

      • 这也需要用于更改旧系统...用于使用序列化数据!
      • 您在数据库中所做的任何更改都需要在“旧”系统中进行更改,否则您不能期望支持多个附件。事实上,主要的改变需要在前端/中间件而不是在数据库中完成。
      • 我们知道这一点,但我们希望将更改保持在尽可能少的代码行更改。
      猜你喜欢
      • 2016-11-05
      • 1970-01-01
      • 2018-07-15
      • 2014-03-31
      • 1970-01-01
      • 2011-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多