mysql - 数据库设计——将每个公司与所有可能的邮政编码连接起来以存储距离

标签 mysql sql database database-design

我正在尝试设计一个数据库,其中包含一个包含提供感兴趣服务的所有公司的表,然后我需要一种方法来存储每个公司到每个可能的邮政编码的距离(~10.000)。 这个想法是每家公司都在特定的距离内运营,并且该距离会不时发生变化。

我有 3 个想法,但没有一个真正感觉正确:

  1. 有一个表,其中每个邮政编码为一行,每个公司为一列 (60 * 10.000),并将距离存储为值。问题我需要使用公司 ID 作为列名,但不知道这是否是正确的方法。

  2. 为每个公司创建一个新表,其中包含邮政编码和距离列 (2 * 10.000)。问题是公司 ID 是表名,再次不确定这是否是正确的方法。

  3. 包含 3 列的表格:公司 ID、邮政编码、距离 (3 * 600.000)。这感觉是最正确的,但意味着很多行。

谁能告诉我是否有更好的方法或选择哪种替代方案?

最佳答案

您应该执行最后一个选项。只要设置了索引,就不应该担心行数过多。这是一个示例实现(MySQL):

CREATE TABLE `company`
(
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(50),
    PRIMARY KEY (`id`)
) ENGINE=InnoDB;

CREATE TABLE `post_code`
(
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `postal_code` VARCHAR(10),
) ENGINE=InnoDB;

CREATE TABLE `distance`
(

    `comnpany_id` INTEGER NOT NULL,
    `post_code_id` INTEGER NOT NULL,
    `distance` FLOAT NOT NULL,
    PRIMARY KEY (`company_id`,`post_code_id`),
    CONSTRAINT `distance_FK_1`
        FOREIGN KEY (`company_id`)
        REFERENCES `company` (`id`)
        ON DELETE CASCADE,
    CONSTRAINT `distance_FK_2`
        FOREIGN KEY (`post_code_id`)
        REFERENCES `post_code` (`id`)
        ON DELETE CASCADE
) ENGINE=InnoDB;

关于mysql - 数据库设计——将每个公司与所有可能的邮政编码连接起来以存储距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35667732/

相关文章:

mysql - SQL - 计算列直到特定结果

sql - 如何使用spark sql过滤特定聚合的行?

database - SQL Server 2008 R2 VB.net 连接

MySQL在小数点后转换丢失数字的子串

sql - 从 9.0 升级到 9.3 后,PostgreSQL 处理标识符是否区分大小写?

mysql - 如何在 MySQL 中使用关键字 IN OR 内部连接 ​​3 个表?

java - Recyclerview 投入使用

mysql - 在 SQL 查询中将 dd/mm/yyyy 转换为 DATETIME

mysql - 具有某些条件的 CActiveDataProvider

mysql - mysql中的复合键由主键和唯一键组成?