【问题标题】:MySQL - Storing Default Values for SystemMySQL - 存储系统的默认值
【发布时间】:2023-03-24 15:38:01
【问题描述】:

我有几个表为我的系统存储相应的记录。例如,可能有一个名为templateslogos 的表。但是对于每个表,其中一行将是系统中的默认值。我通常会为每个表添加一个is_default 列,但除 1 之外的所有行都是0

我的另一个同事看到了另一条路线,其中有一个system_defaults 表。该表的每个表都有一个列。例如,此表将有一个 template_id 列和一个 logo_id 列。然后该列存储相应的默认值。

一般来说,一种方法比另一种更正确吗?第一种方式,除了 1 之外,有许多列具有相同的值。第二种方式,我想我只需要进行连接即可获取详细信息,并且每当我添加一个具有默认值的新表时,表就会横向增长.

【问题讨论】:

  • 为每种方法提供SHOW CREATE TABLE,以及一些示例行。还请告诉我们将获取数据的SELECTs

标签: mysql database database-design normalization


【解决方案1】:

解决方案的主要区别在于确保为每个表分配的默认值不超过一个。

  • is_default 解决方案:这里可能会出现一张表的多个记录的值为 1。这取决于您的数据库的 SQL 方言是否可以通过约束排除。就我对MySQL的理解,这种约束是不能在那里表达的。

  • 单独的表格解决方案:在这里,您可以通过表格设计轻松确保每个表格最多存在一个默认值。通过分配not null 约束,您还可以强制或不强制特定表的默认值。当您引入一个新表时,无论如何您都在扩展您的数据库(以及处理它的软件),因此default 表上的附加属性不会受到影响。

中间课程可能如下:有一张桌子

Defaults
id
table_name
row_id

每个表有一条记录,由表名标识。从技术上讲,这里也可能会出现每张表有多个默认值的问题。但是,如果您只在引入新表时向该表中插入记录,那么您的操作软件将只需要对该表执行更新,而不会插入。您可以通过代码检查轻松检查这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 2023-03-21
    • 2010-09-14
    • 2014-10-23
    • 2016-09-29
    • 1970-01-01
    • 2012-03-28
    相关资源
    最近更新 更多