我的房地产应用程序有一个数据库表,它保存用户的查询(查询)。此表保存有关特定房地产查询的所有信息。
数据库表如下所示:

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数据类型并将其保持为定义了分隔符的字符串,然后在数组中获取值?

最佳答案

如果这些是另一个表的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 = ?

编辑:嗯,我是瘸子,不包括外键,但你明白了。

关于mysql - 在数据库表中存储多个ID的理想解决方案是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4882967/

10-11 02:44
查看更多