MySQL - 存储系统的默认值

标签 mysql database database-design normalization

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

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

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

最佳答案

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

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

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

中间路线可能如下:摆一张 table

Defaults
id
table_name
row_id

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

关于MySQL - 存储系统的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36320144/

相关文章:

mysql - 为什么在 MySQL SELECT 语句中甚至允许使用 "LIMIT 0"?

sql - MDF (SQL) 数据库文件超过 88 GB,我不知道为什么!

Java:按顺序比较三个不同的字段。像一个 SQL 数据库

mysql - 如何修复在 symfony2 中给出 doctrine2 迁移的错误

php - 在 View 页面 PHP 中显示数组数组

php - 连接数据库后执行函数

MySql 不考虑右侧空间

php - 通过 PHP 从 MySQL 数据库中检索行

database - 数据库架构组织

database - 数据库表中的排序列