Php MySQL创建限制值出现次数的列
我目前正在用PHP和MySQL开发一个架构,出现了一个问题。我希望这不是一个荒谬的问题,但如果有答案的话,这将是非常有帮助的 以下是实际情况的简化版本。假设我有一个表,其中有3列表示多个位置。每个位置都可能是默认位置:Php MySQL创建限制值出现次数的列,php,mysql,database,database-design,Php,Mysql,Database,Database Design,我目前正在用PHP和MySQL开发一个架构,出现了一个问题。我希望这不是一个荒谬的问题,但如果有答案的话,这将是非常有帮助的 以下是实际情况的简化版本。假设我有一个表,其中有3列表示多个位置。每个位置都可能是默认位置: location_id int(20), location_name varchar(255), is_default BOOL 列是默认值的值应仅为true(1)或false(0)。此外,我想确保默认设置为true的行不能超过一行。换句话说,我希望允许最大值为一个真值和无限量
location_id int(20), location_name varchar(255), is_default BOOL
列是默认值
的值应仅为true(1)或false(0)。此外,我想确保默认设置为true的行不能超过一行。换句话说,我希望允许最大值为一个真值和无限量的假值:
+-------------+---------------+------------+
| location_id | location_name | is_default |
+-------------+---------------+------------+
|1 |'England' |1 |
|2 |'America' |0 |
|3 |'China' |0 |
|4 |'Russia' |0 |
+-------------+---------------+------------+
其思想是只有一个位置可以作为默认位置。有没有办法将其表示为某种数据类型或列属性?或者我必须在php中强制执行规则,只需运行两个查询,这样每当添加一个is_default column=true的位置时,旧的默认位置的is_default column=false?如果有一种方法可以在MySQL中强制执行它,那就太好了
这似乎是一个很简单的问题,我认为这很常见,但我似乎在互联网上的任何地方都找不到答案,包括MySQL引用。除非有一些明显的数据库设计缺陷,我已经设法忽略了 如果没有另一个表,我将创建一个单独的表来指定默认值,如:
default_location table
+------------+
|location_id |
+------------+
|1 |
+------------+
这样,你只能有一个
也许这属于一个设置表?如果除一个以外的所有值都为0,我将有一个定义默认值的配置文件,并删除表中的列:
default_location_id = 1
是的,但他仍然可以将另一行添加到
default\u location
表中,他将有两个默认位置。更好的方法是两个更新查询:更新位置集为默认值=0
,更新位置集为默认值=1,其中位置id=1
@piotrekkr,感谢您的输入。的确,可以添加另一行来创建另一个默认值。这是这种方法的优点之一。请注意,这只是一个示例。此列很可能是用户表的一部分,因此每个用户都可以有自己的默认值,或者有一个系统表,其中每个系统都有自己的默认值,等等。在原始表设置中,没有任何东西可以阻止2+个位置设置为默认值。sub-table方法通过不将此“无意义”字段附加到所有城市,至少节省了一点存储空间。我也喜欢这种方法,但它仍然需要插入和更新。不确定这对OP有多重要。而且,如果这是在config/settings表中(如@Ami所建议的),则只能有一个。ConfigId、ConfigName、ConfigValue。。。ConfigName上的PK(有点像注册表表)+1或configuration\u settings
表中的“default\u location”行,或其他内容;简而言之,无论您的配置设置在哪里。