我目前正在开发PHP和MySQL架构,并且出现了一个问题。我希望这不是一个荒谬的问题,但如果有答案的话会非常有帮助。
以下是实际情况的简化版本。假设我有一个包含3列代表多个位置的表。每个位置都可能是默认位置:
location_id int(20), location_name varchar(255), is_default BOOL
列is_default
应该只有值true(1)或false(0)。另外,我想确保只有一行可以将is_default设置为true。换句话说,我想允许最多一个真值和一定数量的假值:
+-------------+---------------+------------+
| location_id | location_name | is_default |
+-------------+---------------+------------+
|1 |'England' |1 |
|2 |'America' |0 |
|3 |'China' |0 |
|4 |'Russia' |0 |
+-------------+---------------+------------+
这个想法是只有一个位置可以作为默认位置。有没有办法将此表达为某种数据类型或列属性?或者我是否必须通过简单地运行两个查询来强制执行php中的规则,以便每当添加其is_default列= true的位置时,旧的默认位置是is_default column = false?如果有一种方法可以在MySQL中强制执行它,那将会很棒。
这似乎是一个简单的问题,我认为它很常见,但我似乎无法在互联网上的任何地方找到答案,包括MySQL参考。除非有一些明显的数据库设计缺陷,我已经设法忽略了。
答案 0 :(得分:5)
如果你没有它所属的另一个表,我会创建一个单独的表来指定默认值:
default_location table
+------------+
|location_id |
+------------+
|1 |
+------------+
这样,你只能有一个。
也许这属于设置表?
答案 1 :(得分:1)
如果除了一个之外的所有都是0,我将有一个配置文件定义默认值并删除表中的列:
default_location_id = 1