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中表内的表?的主要内容,如果未能解决你的问题,请参考以下文章