MySQL中表内的表?

Posted

技术标签:

【中文标题】MySQL中表内的表?【英文标题】:Tables inside tables in MySQL? 【发布时间】:2011-12-30 07:04:12 【问题描述】:

我已经设置了一个 mysql 数据库,用于在多个设备上进行位置跟踪。目前,我计划让每台设备都有自己的表格,用于在不同时间存储它们的位置。我在想,在设备的表中,会有一个时间戳表,其中包含纬度、经度和其他识别信息。这是我第一次使用 MySQL,所以我确信这不是最好的方法……但这可能吗?如果没有,还有什么其他选择?

【问题讨论】:

不要考虑层次结构(通常更适合其他数据模型),另一种选择是考虑集合和它们之间的关系:SQL 关系数据库的基本原则(在转向基于关系代数)。任何数量的数据库介绍书籍都可以解释基本的表设计和规范化。 【参考方案1】:

据我所知,您的数据库架构应该或多或少像这样:

create table devices (
    id int not null auto_increment primary key,
    name ...,
    ...
) engine=INNODB;

create table device_locations (
    id int not null auto_increment primary key,
    device_id not null,
    lat ...,
    lng ...,
    ...,
    index ix_device_id(device_id),
    foreign key (device_id) references devices(id) 
) engine=INNODB;

您想要做的完全适合关系数据库(例如 MySQL,嘿,它甚至有 built-in datatypes just for storing GIS data),但是您可能应该先阅读 normal forms。

【讨论】:

【参考方案2】:

尝试不限制架构的 NoSQL 数据库。当您想要构建嵌套集合时,会想到 MongoDB。

【讨论】:

不幸的是,我被 MySQL 数据库困住了(至少目前是这样)。是否有任何替代设计可供我使用,同时仍然跟踪用户、时间和位置之间的匹配? MySQL 可以做到:我知道有人开发了使用 MySQL 作为 RDMS 的企业应用程序级跟踪和跟踪解决方案。我建议你谷歌搜索类似的开源项目。【参考方案3】:

根据 Flickr 使用 MySQL 的经验,它也可以用作无模式,如果您知道自己想要什么,只需将序列化数据保存在列中即可。

MySQL 主要是生产就绪型解决方案,具有现成的备份、恢复、复制和分片工具,非常适合维护。如果您不想使用架构,请不要使用它

【讨论】:

您可以通过多种方式烧猪。他们中的大多数人吃起来不愉快。

以上是关于MySQL中表内的表?的主要内容,如果未能解决你的问题,请参考以下文章

将值与mysql中表的所有字段进行比较[重复]

将值与mysql中表的所有字段进行比较[重复]

如何从 MySQL 中表的每一列的名称中删除前缀?

如何在 MySQL 数据库的多行中保存表单数据(表单内的表)

MySQL中的表注释长度

将mysql某个数据库中表的行数从大到小排序