【问题标题】:What is the best data type that only accepts a few specific values?只接受几个特定值的最佳数据类型是什么?
【发布时间】:2016-06-08 11:54:21
【问题描述】:

我有一些像这样的价值观:

  • PHP
  • CSS
  • HTML
  • JavaScript

我想知道是否可以将列的某些特定值定义为有效值? (其他的都是无效的)


我知道,我可以通过其他方式实现标记系统。创建一个包含有效标签的分隔表并检查所有内容以进行验证。

但实际上该标记系统只是一个示例。我要做的只是为一列定义一些常量值

【问题讨论】:

  • IMO 最干净和最容易维护的解决方案是使用标签创建一个单独的表,并将外键放入表中。
  • @juergend 是的,正如我所说,创建一个单独的表就可以了。但我想知道我是否可以为列定义一些常量?

标签: mysql sql sqldatatypes


【解决方案1】:

您可以在创建表时使用 ENUM 类型并定义常量:

http://dev.mysql.com/doc/refman/5.7/en/enum.html

如果它是一些值的固定列表,我只会使用它。比如“男”、“女”。

【讨论】:

  • 太好了..谢谢 +1
【解决方案2】:

执行此操作的典型方法是使用外键关系。

您可以像这样定义一个值表:

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)
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-14
    • 2017-11-17
    • 2022-01-18
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多