有哪些解决方案可以改变表的列以存储多个值?

时间:2012-07-17 04:29:53

标签: mysql sql database-design data-modeling

我们有一张桌子:

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`)
)

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

首先,更改您的表格,使attachment的类型为TEXT,然后序列化您的附件(例如,json或xml)并将其放入attachment列。< / p>