假设在某个随机表中,您有一个名为status的列。它的实际值将是enabled或disabled。
此列的数据类型是 int/bool(1 或零)还是ENUM与值为enabledand一起使用更好disabled?有什么优点或缺点?
假设您有 4 个或 10 个甚至更多,而不仅仅是两个有效状态?随着所需值数量的增加,优势和劣势会向一侧倾斜还是向另一侧倾斜?
我和我的同事正在讨论数据库中描述性特征的规范化,例如“状态”或“类型”。让我们将讨论的中心表称为“订单”。
在我的常规设计方法中,我会定义另一个表“OrderStatus”来描述订单的状态,然后在“Order”表上创建一个具有关系的外键,即“OrderStatusID”。
这会给我参考完整性。我可以随时加入状态,并且我的可能值始终存在于“OrderStatus”表中。
我的同事不喜欢这种标准化程度,因此他将在“Order”表上定义一个 varchar 字段“OrderStatus”。该字段将直接包含值。
status 的可能值在他的应用程序中定义,更具体地说,在 OrderStatuses 的枚举中定义,因此,除非我可以访问所述应用程序的源代码,否则我无法使用。
我习惯于将数据库的整个上下文作为关系和表存在于数据库中,并且不得不编写“WHERE OrderStatus = 'Sold'”而不是“WHERE OrderStatusID = 3”让我感到烦恼。
怎么想?我正在寻找两种方法的优点和缺点,但我主要关注性能和可读性/可维护性。