gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 20:27:11 25 4
gpt4 key购买 nike

场景:我通过人脸识别 api 运行大量爬行图像,返回的 json 有很多节点,如果我枚举字段,我必须将所有字段划分到多个表中。例如以下是其中一张表格:

    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 值的模式,所以我想也许我可以设计一个如下所示的点表:

    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查询在详细信息页面上显示网站上的所有信息,那么我应该枚举所有字段还是使用面向对象的方式来设计表格?或者有更好的方法吗?

最佳答案

通常,是否使用属性或新表取决于两者之间的关系类型。

就你而言,我肯定会说是。

您有一对多关系 (1:n),为每个点保留一个 id 作为属性会更好。不过,您的点表可能仅存在于 id 以及 x 和 y 值中。我不认为有理由给它命名或添加face_id或pic_id。

现在,根据面是否始终具有相同数量的点(并且名称很重要),您可以为每个所需点添加一个 point_id 作为面表的属性。或者,如果顺序无关紧要,您可以为点表提供一个face_id并以这种方式链接它。 (这样就不会在face表中无缘无故地出现一堆属性了)

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

关于mysql - 在这种情况下我应该使用面向对象的方法来设计数据库表吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39243424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com