我有一些表,用于存储它们对应于我的系统的记录。例如,可能有一个名为templates
和logos
的表。但是对于每个表,其中一行将是系统中的默认行。我通常会为每个表添加一个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/