51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

设计一个船舶航行日志的数据库表结构,需包含航行时间、船位、航向、航速、天气、设备状态等信息,并说明各字段的类型和约束。

成都理工大学就业指导中心工程船三副难度:中等

答案

1) 【一句话结论】设计一个名为“航行日志”的主表,通过主键(日志ID)和字段约束(非空、范围、枚举)确保数据完整性,字段涵盖航行时间、船位、航向、航速、天气、设备状态,满足航行记录的查询与追溯需求。

2) 【原理/概念讲解】数据库表设计遵循“实体-关系”模型,核心是“字段-类型-约束”三要素。以“航行日志”为例:

  • 时间类型:用DATETIME存储精确时间(如2024-05-10 08:30:00),支持按时间排序/计算时间差,类比“日记的日期栏”,必须填写且唯一标识时间点;
  • 位置类型:用VARCHAR存储经纬度字符串(如30.12°N,120.56°E),非空,记录当前位置,类似“日记的地址栏”;
  • 数值类型:航向用INT(范围0-360度),约束角度合理性;航速用DECIMAL(5,2)(如12.5节),保留两位小数,避免精度丢失,类似“日记的数字记录(如温度、速度)”;
  • 文本类型:天气用VARCHAR记录描述(如“晴,风速5级”),设备状态用ENUM(如'正常'、'故障'、'维护中'),规范状态输入,减少错误,类似“日记的备注栏”。

3) 【对比与适用场景】

字段类型定义特性使用场景注意点
航行时间DATETIME精确到秒,支持时间排序记录日志时间戳需考虑时区(如UTC),避免时差错误
船位VARCHAR(50) 或 GEOMETRY(POINT)存储经纬度字符串/空间坐标查询位置轨迹若用空间数据需数据库支持(如PostgreSQL的PostGIS)
航向INT整数表示度数记录航向角度约束范围0-360,确保数据有效性
航速DECIMAL(5,2)5位总位数,2位小数精确记录速度避免精度丢失,如12.5节 vs 13节
天气VARCHAR(100)文本描述天气情况记录环境信息长度足够存储复杂描述
设备状态ENUM('正常','故障','维护中') 或 VARCHAR(20)枚举/文本记录状态记录设备运行状态枚举更规范,减少输入错误

4) 【示例】(MySQL表结构)

CREATE TABLE 航行日志 (
    日志ID INT AUTO_INCREMENT PRIMARY KEY,
    航行时间 DATETIME NOT NULL,
    船位 VARCHAR(50) NOT NULL COMMENT '经纬度,如"30.1234°N,120.5678°E"',
    航向 INT NOT NULL CHECK (航向 BETWEEN 0 AND 360),
    航速 DECIMAL(5,2) NOT NULL CHECK (航速 >= 0),
    天气 VARCHAR(100) NOT NULL,
    设备状态 VARCHAR(20) NOT NULL CHECK (设备状态 IN ('正常','故障','维护中'))
);

5) 【面试口播版答案】(约80秒)
“面试官您好,针对船舶航行日志的数据库表结构设计,我设计一个名为‘航行日志’的主表,核心字段包括航行时间、船位、航向、航速、天气、设备状态。具体来说:

  • 航行时间用DATETIME类型,非空,记录精确时间,方便按时间排序查询;
  • 船位用VARCHAR存储经纬度字符串(如“30.12°N,120.56°E”),非空,记录当前位置;
  • 航向用INT类型,范围0-360度,非空,约束角度合理;
  • 航速用DECIMAL(5,2)类型,非空,保留两位小数,精确记录速度;
  • 天气用VARCHAR存储描述,非空,记录环境信息;
  • 设备状态用枚举或文本,非空,约束状态为‘正常’、‘故障’或‘维护中’。通过主键(日志ID)和各字段约束,确保数据完整性和查询效率。”

6) 【追问清单】

  • 问:设备状态字段如何存储更合理?
    答:建议用ENUM类型(如'正常'、'故障'、'维护中'),减少输入错误,提高数据规范性。
  • 问:时间戳的精度是否需要更高?
    答:若需要记录更精确的时间(如毫秒级),可使用DATETIME(6)或TIMESTAMP(6),但通常秒级足够满足航行日志的查询需求。
  • 问:是否需要关联其他表(如设备表)?
    答:若设备状态需要更详细的设备信息(如设备ID、设备名称),可增加外键关联设备表,但题目要求包含设备状态,当前设计已满足基本需求。
  • 问:航向的单位是否正确?
    答:航向通常用度(0-360)表示,符合航海标准,约束范围0-360确保数据有效性。
  • 问:天气字段是否需要编码?
    答:若需要标准化天气编码(如WMO编码),可增加天气编码字段(如VARCHAR),但当前用文本描述更直观,便于操作人员理解。

7) 【常见坑/雷区】

  • 坑1:时间类型用字符串(如VARCHAR)而非时间戳(DATETIME/TIMESTAMP),导致无法按时间排序或计算时间差。
  • 坑2:航速用整数(INT)而非小数(DECIMAL),丢失速度精度,无法准确记录变化。
  • 坑3:设备状态未做约束(如允许任意文本输入),导致数据不一致(如“正常”“正常运行”等不同表述)。
  • 坑4:忽略主键设计,导致数据重复或无法唯一标识每条日志记录。
  • 坑5:未考虑空间数据存储(如船位),若需要分析轨迹,应使用GEOMETRY类型,否则只能存储字符串,影响空间查询效率。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1