我的2个数据库表中有一个“status”列,但每个表的状态类型相同。例如,作者可以具有以下状态':pending,active,void,suspended。这些相同的状态类型适用于已发布文章的状态。
对STATUS下的任何一个表使用char()并输入4个列出的状态中的任何一个是否合适,或者是否有更多的数据库意义来为每种类型的STATUS_ID和STATUS_type创建一个“STATUS”表状态,然后只在表或未来表中使用STATUS_ID外键?
简单地输入4种类型中的任何一种都是简单的方法,但我认为他们可能会出现用户错误......
由于
答案 0 :(得分:1)
您可以使用enum
字段数据类型来强制值必须是预先选定的值集之一。在幕后,MySQL实际上将这些值存储为整数表示,以节省存储需求。
您是否需要单独的桌子取决于您。如果您认为允许值的集合需要随时间动态变化,那么可能它很有意义(使用外键约束来强制选择其中一个值)。如果值实际上代表系统中需要具有与其关联的属性(字段)的某种真实对象,则您可能还可以从单独的表中获取值。
答案 1 :(得分:0)
您是否考虑过使用状态列的ENUM类型? http://dev.mysql.com/doc/refman/5.0/en/enum.html
答案 2 :(得分:0)
最简单的方法是enum数据类型,第二个表也可以正常工作,但它更复杂。
答案 3 :(得分:0)
单独的状态查找表是可行的方法。它实际上可能会减慢您的查询速度,因为您正在添加连接,但规范化的好处超过了它。最大的实际好处是它可以更轻松地更改状态名称。如果要将“待定”更改为“正在处理”,则只需更改1个字段。
答案 4 :(得分:0)
如果要经常在WHERE子句中使用此列,那么最好为它创建另一个表。
答案 5 :(得分:0)
您对状态表的建议是合理的,这是一种常见做法。根据您用于编程的语言和枚举将是一个合适的替代方法,这有助于确保只有您定义的枚举类型保存在数据库中。
PHP:
abstract class STATUS
{
const pending = 1;
const active = 2;
const void = 3;
const suspended = 4;
function GetConstants()
{
$rc = new ReflectionClass($this);
return $rc->getConstants();
}
}
C#
public enum CourseType
{
pending = 1;
active = 2;
void = 3;
suspended = 4;
}