【问题标题】:Creating SQite-tables while running a program在运行程序时创建 SQite 表
【发布时间】:2018-04-16 14:35:41
【问题描述】:

我在这个论坛上看到几个成员警告说,在应用程序运行时在数据库中创建表。相反,鼓励在编程时创建表,并且只在运行时用数据填充表。

例如,在创建便笺应用程序时,让用户为单个便笺指定名称并将此便笺创建为数据库中的表会很方便。这是通过在用户创建便笺时创建表格,并让便笺的名称成为表格的名称。为什么这是一个不好的做法?我是不是误会了?

【问题讨论】:

  • 将所有笔记放在一张表中。否则,您将如何列出或计算笔记?

标签: sqlite runtime create-table


【解决方案1】:

我可能没有正确理解您的问题,但在我看来,您真正想要做的是在数据库的表中创建一个新行?

【讨论】:

  • 不,这是一个关于良好编程实践的一般问题,而不是具体问题。我之前发布了一个问题,如果您在此问题stackoverflow.com/questions/47004250/… 下看到第 3 条评论,我会被警告不要让用户在运行时创建新表。他可能有一个好点,我只需要知道为什么。
【解决方案2】:

对于您和此类应用程序的用户来说,为用户可能想要添加的每个注释创建一个表格非常不方便。这不是它的工作方式。一个表应该包含相同类型的信息行,例如一个注释,每个注释应该作为一个行/记录添加到所述表中。例如,该表应称为 notes,如果您希望为每个便笺命名,则可以是 notes 表中称为 name 的列。

打个比方,如果您是手动记笔记(没有电子设备),您是否会随身携带一个笔记本并根据需要在不同页面上添加笔记,或者您是否会随身携带满满一袋笔记本,这样每当您想添加新笔记时,您就可以将每个笔记添加到单独的笔记本中?

在这个类比中,笔记本相当于数据库表,所述笔记本的页面相当于数据库表中的行。

我真的想不出在运行时创建表的原因。可以说,数据库结构应该是“一成不变的”,并且在运行时您应该只操作数据库中的数据,即添加、删除或更新现有表中的行/记录。在运行时创建表是一个很大的禁忌。

【讨论】:

  • 我明白你的意思,但是说该应用程序是一个应用程序,用户可以在其中列出若干外语词汇表及其翻译。每个词汇表列表的名称当然可以有一个名为 name 的行,但是用词汇表和翻译来制作其余行会更复杂。词汇表的数量可能会有所不同。为什么在运行时创建表不行?会发生什么坏事?
  • 我不确定我是否完全理解您的要求,但我会假设您需要一个单词的一侧,以及该单词在另一侧的另一种语言的多个翻译。这可以通过涉及一对多关系的适当数据库设计来完成,如果您不熟悉数据库设计技术,您应该先研究一下。因此,名称不会是一行,而是一列。然后,您将拥有另一个表,其中可以有多个行,其中包含该单词的多个翻译,这基本上是一对多的关系。
  • 谢谢!这就是我一直在寻找的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-03
相关资源
最近更新 更多