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

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

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

最佳答案

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


is_default解决方案:在一个表中,有多个记录的值可能为1。在这种情况下,是否可以将其排除在约束之外,这取决于数据库的SQL方言。据我了解MySQL,这种约束不能在那里表达。
单独的表解决方案:在这里,您可以通过表设计轻松地确保每个表最多存在一个默认值。通过分配not null约束,您还可以为特定表强制设置默认值,也可以不设置默认值。引入新表时,无论如何都将扩展数据库(及其上运行的软件),因此default表上的附加属性不会受到影响。


可能有以下中间路线:有一张桌子

Defaults
id
table_name
row_id


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

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

10-11 01:35
查看更多