数据库设计,列数可变

时间:2013-10-21 17:15:56

标签: mysql sql database-design

我有一个简单的应用程序,用户将数据提交到表中。

目前,用户可以传递3个字段。我正在尝试找到一个解决方案,其中描述列的数量可能会有所不同,具体取决于用户创建的描述列表。

到目前为止,我一直在考虑:

  1. 使user_input表具有许多可空的描述 字段,从1-15开始,因此限制了描述的数量 用户可以定义为15的字段。此解决方案非常容易 但是查询和维护仅限于一定数量的字段。 (这是一个可行且可接受的解决方案吗?)
  2. 创建一个表,其中每行对应于1个描述 进入。这将允许用户创建无限数量的 描述字段,但是存储每个所有输入而不是 1行现在采用n行,其中n是链接的描述计数 到当前的description_list。用户可以自由选择金额 列,但不容易查询和维护。
  3. 我目前的表格是这样的:

    CREATE TABLE `user_input` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `user_id` int(11) NOT NULL,
    `description_list_id` int(11) NOT NULL,
    `description1` int(11) NOT NULL,
    `description2` int(11) NOT NULL,
    `description3` int(11) NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    还有其他解决方案吗?

2 个答案:

答案 0 :(得分:11)

绝对是选项#2。在这种情况下,Normalizaing始终是最佳选择。你说的更正确,但是当你需要超过15个描述时,你正在克服不可避免的问题。

答案 1 :(得分:4)

就灵活性而言,第二种解决方案是优选的。如果明天需要使用第一个解决方案添加更多描述字段,则需要修改表和代码来管理它。

第二种解决方案现在可能需要更多工作,但它将处理2个类似200个描述。

对于一个小问题,第一种方法是更快速和肮脏的解决方案,如果你有时间尝试新的东西,第二种方法也是一个很好的练习。