数据库:一两个表,什么是更好的方法?

时间:2017-08-15 16:14:49

标签: mysql sql database database-design

假设我有一个应用程序,用户可以用语言编写故事。

当用户选择语言时,可能有两种情况:

  1. 用户从支持/官方语言中选择保存在一个表格中的语言。
  2. 用户想要选择的语言在该表中不可用。因此用户创建自定义语言。
  3. 我的问题是:我在哪里保存这些自定义语言?我应该使用“支持的语言”将它们放在表格中还是创建一个单独的表格?

    我一直在考虑以下论点:

    单独的表:

    • Pro:由于自定义语言仅适用于所有用户可用的创建者和支持的语言,因此我会更频繁地搜索支持的语言。如果只有一个只支持语言的表,那么找到支持的语言所需的时间比支持和自定义语言只有一个表的时间要短。
    • Pro:自定义语言可能比支持的语言多得多,因为不同的用户可能会创建相同的自定义语言(这真的是一个专业的论点吗?)
    • Con:在其他表格中。 G。故事表我需要保存语言,然后我需要两列:一列有语言ID,另一列告诉它是自定义还是受支持的语言。

    一张桌子:

    • Con:如果官方支持或自定义语言,我需要额外的列保存

    由于我对数据库设计很陌生,我无法决定,所以我问你:更好的方法是什么?

4 个答案:

答案 0 :(得分:2)

首先:你的问题可能会被关闭,因为(我认为)没有技术上正确的答案,只有不同的作者可以告诉你他们的个人意见作为答案。所以你的问题主要是基于意见的。

坚持下去:我的意见将是一个表格中的额外列。这将允许您快速整理,它也将(并且我认为更重要)允许用户定期选择自定义语言(如果它已经存在)(并且如果您不通过仅显示非自定义语言来阻止它)给用户)。这最终会减少重复的自定义语言。

答案 1 :(得分:1)

创建一个单独的表。除了任何空间限制外,您还应该担心数据的一致性。确保您的数据库已规范化。它在很多方面都很重要。

  

分析

让我们假设您的应用程序已成为病毒式传播,并且正在进行大量插入操作。在将来的某个时间,您可能希望修改表以仅存储用户的最近/实时/当前记录,因为不需要通用数据。如果您只有一个表格,那么您实际上最终会覆盖很多原始值(例如,如果您想查询 - 最常见的自定义语言 - 它将无法使用因为原来的记录现在丢失了。)

  

性能

不同的表格可让您选择排列可能最适合读/写的数据,即您选择索引的方式。将大量数据保存在单个表中可能会影响您的决策。

  

健壮/模块化

如果您有一个单独的自定义语言表,您可以根据需要更改该表。随着您的发展,可能需要插入几个列作为属性。改变庞大的桌子是不可取的,因为它有可能使系统处于滞后状态(如果你只有一张桌子并将所有东西推到那里,这将变得更加突出)。我们说,我开发了一个API,为您的自定义语言提供某种支持。您可能希望将我的标识符添加为记录。它总是更容易改变只有相关数据的表,而不是改变具有通用数据集的单个表,这在任何情况下都是不可取的。

要使此方法完美运行,您需要一个设计文档,说明插入期间的所有约束,允许NULL的属性,您将如何管理一对多关系(此&# 39; ll需要实现外键)等...

答案 2 :(得分:1)

我可能会使用单个“语言”参考表。

  1. 在能够观察到任何性能影响之前,您必须累积许多,多种语言。
  2. 您的架构会更简单
  3. “语言类型”查找列实际上可以存储数字,您可以索引并优化该字段上的任何查询。
  4. 请告诉我们您的想法!

答案 3 :(得分:0)

单独的表格。除非出于性能原因而非专门优化,否则您应遵循以下原则:https://en.wikipedia.org/wiki/Database_normalization