只接受少数特定值的最佳数据类型是什么?
What is the best data type that only accepts a few specific values?
我有一些像这样的价值观:
PHP
CSS
HTML
JavaScript
我想知道是否可以将列的某些特定值定义为有效值? (其他都无效)
我知道,我可以用其他方式实现标签系统。创建一个单独的 table,其中包含有效标签并检查所有内容以进行验证。
但实际上那个标签系统只是一个例子。我想要做的就是 为列定义一些常量值 。
您可以使用 ENUM 类型并在创建 table 时定义常量:
http://dev.mysql.com/doc/refman/5.7/en/enum.html
如果它是一些值的固定列表,我只会使用它。点赞"male"、"female".
执行此操作的典型方法是使用外键关系。
您可以像这样定义 table 个值:
create table skills (
skillId int auto_increment primary key,
skill varchar(255) unique
);
insert into table_of_values (value)
select 'PHP' union all
select 'CSS' union all
. . . ;
然后您可以使用外键进行验证。说:
create table PeopleSkills (
PeopleSkillsId int auto_increment primary key,
PeopleId int,
Skill varchar(255),
constraint fk_PeopleSkills_PeopleId foreign key (PeopleId) references People(PeopleId),
constraint fk_PeopleSkills_Skills foreign key (Skill) references skills(skill)
);
注意:此示例使用字符串作为外键引用。我实际上并不提倡这种方法——但这是对您问题的直接回答。实际上,约束可以使用id而不是名称:
create table PeopleSkills (
PeopleSkillsId int auto_increment primary key,
PeopleId int,
SkillId int,
constraint fk_PeopleSkills_PeopleId foreign key (PeopleId) references People(PeopleId),
constraint fk_PeopleSkills_SkillId foreign key (SkillId) references Skills(skillId)
);
我有一些像这样的价值观:
PHP
CSS
HTML
JavaScript
我想知道是否可以将列的某些特定值定义为有效值? (其他都无效)
我知道,我可以用其他方式实现标签系统。创建一个单独的 table,其中包含有效标签并检查所有内容以进行验证。
但实际上那个标签系统只是一个例子。我想要做的就是 为列定义一些常量值 。
您可以使用 ENUM 类型并在创建 table 时定义常量:
http://dev.mysql.com/doc/refman/5.7/en/enum.html
如果它是一些值的固定列表,我只会使用它。点赞"male"、"female".
执行此操作的典型方法是使用外键关系。
您可以像这样定义 table 个值:
create table skills (
skillId int auto_increment primary key,
skill varchar(255) unique
);
insert into table_of_values (value)
select 'PHP' union all
select 'CSS' union all
. . . ;
然后您可以使用外键进行验证。说:
create table PeopleSkills (
PeopleSkillsId int auto_increment primary key,
PeopleId int,
Skill varchar(255),
constraint fk_PeopleSkills_PeopleId foreign key (PeopleId) references People(PeopleId),
constraint fk_PeopleSkills_Skills foreign key (Skill) references skills(skill)
);
注意:此示例使用字符串作为外键引用。我实际上并不提倡这种方法——但这是对您问题的直接回答。实际上,约束可以使用id而不是名称:
create table PeopleSkills (
PeopleSkillsId int auto_increment primary key,
PeopleId int,
SkillId int,
constraint fk_PeopleSkills_PeopleId foreign key (PeopleId) references People(PeopleId),
constraint fk_PeopleSkills_SkillId foreign key (SkillId) references Skills(skillId)
);