在这种情况下,我应该使用面向对象的方法来设计数据库表吗?

Should I use Object-oriented approach in designing database tables in this case

场景: 我通过人脸识别 运行 抓取了大量图像 api,返回的 json 节点太多,我不得不将所有字段分成多个 table如果我枚举字段。例如以下是 table 之一:

    CREATE TABLE IF NOT EXISTS `face_landmark_info_nose` (
        `face_id`                  VARCHAR(40) NOT NULL,
        `pic_id`                    INT(11) NOT NULL,
        `nose_contour_left1_x`     DECIMAL(10, 6),
        `nose_contour_left1_y`     DECIMAL(10, 6),
        `nose_contour_left2_x`     DECIMAL(10, 6),
        `nose_contour_left2_y`     DECIMAL(10, 6),
        `nose_contour_left3_x`     DECIMAL(10, 6),
        `nose_contour_left3_y`     DECIMAL(10, 6),
        `nose_contour_lower_middle_x`     DECIMAL(10, 6),
        `nose_contour_lower_middle_y`     DECIMAL(10, 6),
        `nose_contour_right1_x`     DECIMAL(10, 6),
        `nose_contour_right1_y`     DECIMAL(10, 6),
        `nose_contour_right2_x`     DECIMAL(10, 6),
        `nose_contour_right2_y`     DECIMAL(10, 6),
        `nose_contour_right3_x`     DECIMAL(10, 6),
        `nose_contour_right3_y`     DECIMAL(10, 6),
        `nose_left_x`     DECIMAL(10, 6),
        `nose_left_y`     DECIMAL(10, 6),
        `nose_right_x`     DECIMAL(10, 6),
        `nose_right_y`     DECIMAL(10, 6),
        `nose_tip_x`     DECIMAL(10, 6),
        `nose_tip_y`     DECIMAL(10, 6),
        PRIMARY KEY ('face_id, pic_id')
    );

后来我注意到大多数字段都处于单个点的 x 值和 y 值的模式中,所以我在想也许我可以设计一个点 table,如下所示:

    CREATE TABLE IF NOT EXISTS `facepp_point` (
        `face_id`                  VARCHAR(40) NOT NULL,
        `pic_id`                   INT(11) NOT NULL,
        `x_value`                  DECIMAL(10, 6),
        `y_value`                  DECIMAL(10, 6),
        `point_name`               VARCHAR(40) NOT NULL,
        PRIMARY KEY('face_id, pic_id')
    );

虽然这样做以后程序容易维护,但是像这样一共130个左右的点一张图片一张脸我得开一张mysql查询他们每个人在详细信息页面上显示网站上的所有信息,那么我应该枚举所有字段还是使用面向对象的方式来设计 tables?或者有更好的方法吗?

一般来说,是使用属性还是新 table 取决于两者之间的关系。

你的情况我肯定会说是。

你有一对多的关系 (1:n),最好为每个点保留一个 id 作为属性。你的观点 table 可能只存在于 id 和 x 和 y 值之外。我看不出有什么理由给它命名或添加 face_id 或 pic_id.

现在,根据面是否始终具有相同数量的点(并且名称很重要),您可以为每个需要的点添加 point_id 作为面 table 的属性。 或者,如果顺序无关紧要,您可以这样给点 table 一个 face_id 和 link。 (这样你脸上就不用无缘无故的一堆属性了table)

这可能有点简化,我不知道您的用例的确切工作原理。但一般来说,您会查看它是 1:1、1:n 还是 n:n 关系,并以此为基础做出决定。