作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
当我为约会网站设计MySQL 数据库 时,我对如何存储引用数据产生了疑问。目前数据库有33张表,需要引用的字段有将近32个。我们还必须考虑其中许多元素需要翻译。
在阅读了一些意见之后,我几乎拒绝使用枚举,例如:
CREATE TABLE profile (
'user_id' INT NOT NULL,
...
'relationship_status' ENUM('Single','Married') NOT NULL,
...
);
通常我会使用像这样的引用表:
CREATE TABLE profile (
'user_id' INT NOT NULL,
...
'relationship_status_id' INT NOT NULL,
...
);
CREATE TABLE relationship_status (
'id' INT NOT NULL,
'name' VARCHAR(45) NOT NULL,
PRIMARY KEY ('id')
);
但是创建 32 个表可能有点过头了,所以我正在考虑用 PHP 编写代码,如下所示:
class RelationshipStatusLookUp{
const SINGLE = 1;
const MARRIED = 2;
public static function getLabel($status){
if($status == self::SINGLE)
return 'Single';
if($status == self::MARRIED)
return 'Married';
return false;
}
}
你怎么看?因为我猜它可以提高查询的性能,也可以使整个站点的开发更容易。
谢谢。
最佳答案
绝对是避开 ENUM 恕我直言的好主意:why ENUM is evil .从技术上讲,查找表将是首选解决方案,尽管对于简单的值,PHP 类可以工作。出于与 ENUM 相同的原因,您确实需要注意这一点;如果你的集合中的值增长,它可能变得难以维护。 (关于“同居”、“离婚”、“民事伴侣关系”、“丧偶”等)。使用 PHP 类查询值列表也很重要;可以使用反射,但不如简单的 MySQL SELECT 简单。这可能是在性能成为问题之前我不会担心性能的情况之一。首先为您的代码/应用程序使用最佳解决方案,然后根据需要进行优化。
关于php - 枚举 vs 引用表 vs 查找类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9723194/
我是一名优秀的程序员,十分优秀!