MySQL - 存储系统默认值

MySQL - Storing Default Values for System

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

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

总的来说,一种方式比另一种方式更正确吗?第一种方式,除了 1 之外,有许多列具有相同的值。第二种方式,我想我只需要做一个连接来获取细节,并且 table 每当我添加一个新的 table 有一个默认值。

解决方案的主要区别在于如何确保为每个table分配一个以上的默认值。

  • is_default 解决方法:这里可能会出现一个table的不止一条记录的值为1,这取决于你的SQL方言数据库是否可以通过约束排除。据我了解MySQL,那里不能表达这种约束

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

中间路线可能如下:table

Defaults
id
table_name
row_id

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