【问题标题】:Different columns for different categories in SQL [closed]SQL中不同类别的不同列[关闭]
【发布时间】:2021-04-25 01:46:26
【问题描述】:

我有一个 SQL 表 mobile。对于不同的手机,我想保存不同的数据。例如,在触摸移动设备的情况下,这些列是必需的。

  • 刷新率
  • 分辨率
  • 延迟

对于其他手机,这些列是必需的。

  • 是黑白的
  • 屏幕尺寸

除此之外,还有一些常见的列,这两个类别都需要,例如

  • 价格
  • 型号

那么我该如何设计这张桌子。我应该创建两个单独的表吗?或者只有一个,然后我如何处理不同类别的必需属性?还是其他方法?

【问题讨论】:

  • 我建议将所有列放在一个表中,并在它们不适用时保留值 NULL
  • @GordonLinoff 但是每个类别的列是必需的,它们不能是NULL
  • 您可以从前端进行管理。如果您要为“Touch Mobile”插入信息,请将相关字段设为必填,反之亦然。
  • single-table-inheritanceclass-table-inheritance 是显示与您的案例相关的技术的两个标签。如果你点击了解更多,你会得到一个解释。

标签: mysql sql database database-design


【解决方案1】:

创建一个包含所有这些列的单个表以及一个名为 MobileType 的新列。您可以为“Touch Mobile”插入 1,为“Other Mobile”插入 0。 如果您要插入“触摸手机”的信息,则在“MobileType”字段中输入1,并在相关字段中输入所有与触摸手机相关的信息。将“其他移动”相关字段保留为 NULL。对“其他移动”类型条目执行相反的操作。

使 MobileType,Price,Modile 不是空字段和其他空字段并添加以下约束,这将强制您的条件:

ALTER TABLE mobile ADD CONSTRAINT CK_mobile CHECK(
    Refreshrate is null and Resolution is not null and  Latency  is not null and Isblackandwhite is null and Screensize is null
    OR
    Refreshrate is  null and Resolution is  null and  Latency  is  null and Isblackandwhite is not null and Screensize is not null
    )

【讨论】:

  • 这很酷。但是,如果我使用的是 ER 图,如何添加这些约束?
【解决方案2】:

作为数据验证的一部分,我将只创建一个表并通过用户界面管理任何必填字段。我不会通过表字段定义来管理它。

如果您真的想创建必填字段,请为它们提供默认值,然后您可以稍后过滤。

创建多个表是可能的,但管理起来很麻烦。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 2010-11-16
    相关资源
    最近更新 更多