繁体   English   中英

关于表上的列数的困境

[英]Dilemma about the number of columns on a table

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

困境:
该清单有212个条目,这意味着212行。 我有5列需要输入的内容,即212x5。 这意味着,我必须创建1060列,以便我可以对网站进行编码以执行我想要的操作。 表格上的1060列似乎是错误的,使用起来很累。

我的示例解决方案:
我将5列分成5个表,以创建清单的日期作为其主键。 然后,我将这5个表用于其对应的列,从而将每个表的列数减少到212。

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

**编辑:由于某些原因,我无法评论任何答案,并在页面上显示错误。 不过,我非常感谢大家的回答; 但是,我有1条信息可能会改变您的答案。 我曾考虑过制作5列而不是令人讨厌的1060,但是这样做,我将需要/系统将需要为每1个工作表创建1个表,当然,随着时间的流逝,这将对数据库造成严重的问题。

尽管ah_hau仍然相当庞大,但它的答案似乎是最小且最容易处理的。 通过使用它,系统将为每个清单创建217个条目,但仅使用6-8列。 感谢所有了解此问题的人,我希望我在下一个问题上再次与大家见面。

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

纵观您的所有要求,您已禁止使用普通的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个单元格时,您不必锁定整个清单。 这有助于加快并发访问速度。

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

你的表结构应该看起来像

  1. 用户身份
  2. entryid(值(从1-212开始)
  3. col1_entry
  4. col2_entry
  5. col3_entry
  6. col4_entry
  7. col5_entry

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM