繁体   English   中英

在数据库表中存储多个ID的理想解决方案是什么?

[英]What is the ideal solution for storing multiple ID's in a database table?

我的房地产应用程序有一个数据库表,其中包含用户的查询(查询)。 该表包含有关特定房地产查询的所有信息。

数据库表如下所示:

CREATE TABLE IF NOT EXISTS `queries` (
  `id` bigint(20) NOT NULL auto_increment,
  `category_id` int(10) NOT NULL,
  `serial` varchar(30) NOT NULL,
  `minBudget` int(11) NOT NULL,
  `maxBudget` int(11) NOT NULL,
  `city_id` int(10) NOT NULL,
  `area_id` int(10) NOT NULL,
  `locality` varchar(100) NOT NULL,
  `status` tinyint(1) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

city_idarea_id中,有些情况下我想存储多个 ID。 例如10、12、20、50等。

我应该如何将其存储在数据库中?

我应该使用varchar数据类型并将其作为定义了定界符的字符串保存,然后在数组中获取值吗?

您可以这样做,但这并不是真正的首选解决方案。 这是数据库标准化中的经典折衷方案。

“更正确”的方法是使表“ cities”和“ areas”以及表“ queries_cities”和“ queries_areas”之间具有多对多关系。

否则,如果城市或地区ID发生变化会怎样? 无需在一个地方更改单个记录,而是可以编写一个脚本来手动更新和更新所有查询记录。

如果这些字符是另一个表的ID,请不要使用varchar。 使用多对多表将它们映射在一起。

CREATE TABLE IF NOT EXIST `query_cities` (
 `id` bigint(20) NOT NULL auto_increment,
 `query_id` bigint(20),
 `city_id` bigint(20)
)

CREATE TABLE IF NOT EXIST `query_areas` (
 `id` bigint(20) NOT NULL auto_increment,
 `area_id` bigint(20)
)

这比将东西塞进varchar更加干净-例如,它允许您说:

SELECT c.city_name, c.state, c.whatever FROM queries q 
JOIN cities c ON (q.city_id = c.id) WHERE q.id = ?

编辑:嗯,我很me脚,那里没有外键,但是您明白了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM