MySQL - 存储系统

时间:2016-03-30 21:32:58

标签: mysql database database-design normalization

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

中间课程可能如下:有一张桌子

Defaults
id
table_name
row_id

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