表示关系数据库中的数字范围(MySQL)

Nic*_*ong 12 mysql sql database database-design relational-database

我试图了解是否有任何标准的最佳实践方法来建模关系数据库中的数字范围(在这种情况下是MySQL),如果这实际上是一件明智的事情.

我将解释引发上下文问题的任务.

我目前正在设计一个数据库,该数据库将为客户分配标识符池.

潜在标识符池的范围为0到大约2 ^ 30

可以为给定客户分配从单个标识符到多个连续块中的数百万个的任意数量的标识符.

给定的标识符只能分配给单个客户(即它是一对多的关系)

显然,将有一个Customer表和一个包含Customer键的Identifier表.

复杂性来自于如何为标识符建模:

选项一是使用一行代表单个标识符.这将导致表中可能存在大量行,但会搜索谁拥有哪个标识符以及给定标识符是否正在使用中.

第二个(我认为更有希望的)选项是让一行代表一系列具有最小值和最大值的值.这会使查询变得更复杂(我假设用于检查标识符是否正在使用的查询将查询"最小值低于X"和"最大值高于X"的范围)但是会导致远行数更少,可能更容易管理和更新.

我欢迎任何关于这是否是一个好方法的意见,如果没有,如果有一个明显更好的方法,我错过了.

Qua*_*noi 7

如果范围不相交,则可以将它们存储为INT值对:

CREATE TABLE customer_range
        (
        customerId INT,
        rgStart INT,
        rgEnd INT,
        PRIMARY KEY (customerId, rgStart),
        UNIQUE KEY (rgStart)
        )
Run Code Online (Sandbox Code Playgroud)

要查询号码所属的客户,请使用以下命令:

SELECT  customerId
FROM    customer_range
WHERE   rgStart <= $mynum
        AND rgEnd >= $mynum
ORDER BY
        rgStart DESC
LIMIT 1
Run Code Online (Sandbox Code Playgroud)