database - 违反了第一范式,可以满足我的目的吗?

标签 database arrays serialization normalization

所以我正在制作运行日志,并将锻炼结果存储为表格中的条目。对于每次锻炼,用户可以添加间隔(由时间和距离组成),因此我有一个如下所示的数组:

[workout] =>
    [description] =>
    [comments] =>
    ...
    [intervals] =>
        [0] =>
            [distance] => 200m
            [time] => 32
        [1] =>
            [distance] => 400m
            [time] => 65
        ...

我真的很想将“intervals”数组扔进serialize()或json_encode()并将其放入表中的“intervals”字段中,但这违反了良好的数据库设计原则(顺便说一下,我几乎一无所知)。

这样做有什么缺点吗?我从不打算根据“间隔”的内容查询我的表。仅为间隔创建一个单独的表似乎会带来很多不必要的复杂性,因此如果有更多经验的人遇到过这样的情况,您采取了什么路线以及结果如何?

最佳答案

我认为这是一个坏主意。例如,间隔字段应该有多大?如果将其分成两个表,因为它看起来像一对多关系,所以您不需要考虑间隔数量的人为大小限制。

此外,尽管您说您永远不需要根据时间间隔进行查询,但您稍后可能会改变主意并找到您确实想要这样做的情况。为什么要限制你的能力并人为地使这种特殊情况非规范化呢?创建两个表并不那么复杂。此外,您始终可以将它们加入到 View 中,将它们视为查询的单个逻辑数据集,并两全其美。

关于database - 违反了第一范式,可以满足我的目的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4572884/

相关文章:

mysql - Wordpress - ftp 站点/导出数据库到本地主机,本地主机图像仍然指向 .com,为什么?

mysql - 如何将值从一个 MySQL 数据库复制到另一个

c# - 将值传递给表值参数时忽略标识列

javascript - 数组元素不会显示在 JavaScript 的选择框中

c# - 如何使用 .NET 运行时序列化识别放置在独立存储中的对象的版本?

javascript - 重新索引数组

android - 在 Android 上序列化一个 Drawable 对象

database - 对在数据库设计中使用 "display_order"字段的批评是什么?

php - 数组中表情符号的问题

c++ - ComboBox Qt C++ 中的一维数组