2016-03-30 48 views
0

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

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

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

+0

为每种方法提供'SHOW CREATE TABLE',以及一些示例行。同时告诉我们关于将获取数据的'SELECTs'。 –

回答

1

这些解决方案主要不同之处在于确保为每个表分配不超过一个默认值。

  • is_default解决方案:这可能发生,一个表的多个记录的值为1,这取决于你的数据库的SQL方言,这是否可以通过限制被排除在外。据我了解MySQL,这种约束不能在那里表达。

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

中庸之道可能如下:有一个表

Defaults 
id 
table_name 
row_id 

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

+0

太棒了,谢谢你的解释。 – kenshin9