首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL数据类型用于状态

MYSQL数据类型用于状态
EN

Stack Overflow用户
提问于 2016-01-10 18:36:21
回答 4查看 2.5K关注 0票数 2

我需要找出用于状态的哪种数据类型。

应该是SETVARCHAR还是其他什么?

代码语言:javascript
复制
CREATE TABLE actors(
    state SET('USA','Germany','....)
    )

另一个选择

代码语言:javascript
复制
CREATE TABLE actors(
state VARCHAR(30)
)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-01-10 18:51:28

假设有几十个或超过100个国家,最好使用单独的表格。

代码语言:javascript
复制
CREATE TABLE states(
  state_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(30)
);

还建议在state_id上使用外键,因此如果要从数据库中删除状态,它不会破坏其他数据。

如果每个参与者只被分配到一种状态(1:1),您可以在参与者表中使用列。

代码语言:javascript
复制
CREATE TABLE actors(
   actor_id INT ...,
   state_id INT,
)

或者,如果每个参与者都可以被分配到更多的状态(1:N),那么使用另一个表来处理这些关系:

代码语言:javascript
复制
CREATE TABLE actors(
   actor_id INT ...,
)
CREATE TABLE actors_to_states(
   actor_id INT,
   state_id INT
)
票数 3
EN

Stack Overflow用户

发布于 2016-01-10 18:59:35

SET是一个复合数据类型,包含来自预定义的一组可能值的值。如果表包含这样的数据,那么根据关系数据库理论,它并不在1NF中。因此,只有少数特殊情况下,这种做法是合理的。在大多数情况下,我建议对国家使用单独的表格,例如如下所示:

代码语言:javascript
复制
CREATE TABLE countries (id SMALLINT, name VARCHAR(100))
票数 2
EN

Stack Overflow用户

发布于 2016-01-10 18:47:42

要回答这些类型的问题,您应该对数据进行少量的数据分析,并对您的数据提出如下问题:

  1. 我的数据的最大大小是多少?

在你的例子中,它将是有着最大名字的国家-- .Note --下来。增加20,以保持安全。

  1. 我的数据是否总是包含数字、字符或组合?

在你的情况下只有人物。所以它是varchar

此外,计划您的数据模型,以便您不需要编辑之后,.Use of set将不会被我推荐在这种情况下。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34709287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档