关于表上列数的困境

时间:2014-08-18 03:40:30

标签: mysql sql database

方案:
我正在为一个清单创建一个网站,它可以由多个用户同时完成/访问,因此它需要某些字段可编辑,可保存和可检索。

困境:
清单有212个条目,这意味着212行。我有5列需要输入,212x5。这意味着,我必须创建1060列才能让我对网站进行编码以执行我想要的操作。桌子上的1060列似乎是错误的,使用起来非常累人。

我的样本解决方案:
我将5列分成5个表,将核对表创建的日期作为主键。然后我将这5个表用于它们相应的列,从而将每个表的列数减少到212.

无论如何我可以减少这个吗?对不起,很长的帖子,任何帮助将不胜感激。

**编辑:出于某种原因,我无法评论任何答案,页面上的错误说。不过,我非常感谢大家的回答;但我有1个信息可能会改变你的答案。我想过制作5列代替令人讨厌的1060,但是这样做,我需要/系统需要每1个工作表创建1个表,当然,随着时间的推移,这会给数据库带来很大的问题。 />
虽然仍然非常庞大,但是ah_hau的答案似乎是最小的,也是最容易处理的。通过使用它,系统将为每个清单创建217个条目,但仅使用6-8列。感谢所有了解这个困境的人,我希望在下一个问题上再次见到你们。 干杯!

3 个答案:

答案 0 :(得分:0)

有不同的方法,我只是每个清单存储一个Json字符串。 Json字符串将是对象{checklistName,checklistValue,timestamp}的Json数组。因此,数据库表只有两列{id,checklist}。这是最小的一面,您可能希望将其分解为较小的Json对象和/或向它们添加更多细节。

答案 1 :(得分:0)

看着你所有的要求,你已经禁止常见的6列设置,我仍然建议你使用类似的设置。

尝试拥有这样的表

id [bigInt] (PK,auto_incrment)
rowId [int] //checklist row id
columnId [int] //checklist column id
text [varchar/text]
create_date [Date]
create_time [Time]

Index
unique key chekcklist_cell (create_date, rowId, columnId)

根据您的偏好,您还可以将columnId字段拆分为5列,其名称为column1~5,以减少数据库条目数。但我建议使用我的设置,因为看起来用户将一次更新您的清单1单元格(或列表周围的多个单元格),我的架构将更有意义。此架构也非常易于扩展,可以轻松地向它们添加新字段。我能想到的最后一件事是,当用户只更新1个单元格时,您不必锁定整个清单。这有助于加速并发访问。

答案 2 :(得分:-1)

为什么不在核对清单表中直接添加1列?

你的表格结构应该是

  1. 用户ID
  2. entryid(值1-212)
  3. col1_entry
  4. col2_entry
  5. col3_entry
  6. col4_entry
  7. col5_entry