MySQL创建限制值出现量的列

Jon*_*han 2 php mysql database database-design

我目前正在开发PHP和MySQL的架构,并且出现了一个问题.我希望这不是一个荒谬的问题,但如果有答案的话会非常有帮助.

以下是实际情况的简化版本.假设我有一个包含3列代表多个位置的表.每个位置都可能是默认位置:

location_id int(20), location_name varchar(255), is_default BOOL
Run Code Online (Sandbox Code Playgroud)

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           |
+-------------+---------------+------------+
Run Code Online (Sandbox Code Playgroud)

这个想法是只有一个位置可以是默认位置.有没有办法将此表达为某种数据类型或列属性?或者我是否必须通过简单地运行两个查询来强制执行php中的规则,以便每当添加其is_default列为true的位置时,旧的默认位置为is_default column = false?如果有一种方法可以在MySQL中强制执行它,那将会很棒.

这似乎是一个简单的问题,我认为它很常见,但我似乎无法在互联网上的任何地方找到答案,包括MySQL参考.除非有一些明显的数据库设计缺陷,我已经设法忽略了.

Ami*_*Ami 5

如果你没有它所属的另一个表,我会创建一个单独的表来指定默认值,如:

default_location table
+------------+
|location_id |
+------------+
|1           |
+------------+
Run Code Online (Sandbox Code Playgroud)

这样,你只能拥有一个.

也许这属于设置表?

  • 没有什么可以阻止在原始表设置中将2个以上的位置设置为默认值.子表方法通过不将所有"无意义"字段附加到所有城市来至少节省一点存储空间. (3认同)