我试图了解在关系数据库(在本例中为MySQL)中是否存在用于对数字范围进行建模的任何标准最佳实践方法,并且这实际上是否是明智的选择。

我将解释提示问题的任务。

我目前正在设计一个数据库,该数据库将对标识符池向客户的分配进行建模。

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

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

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

显然,将有一个Customer表和一个包含Customer键的标识符表。

如何为标识符建模带来了复杂性:

选项一是让一行代表单个标识符。这将导致表中潜在的行数众多,但将使得搜索谁拥有哪个标识符以及给定的标识符是否正在使用中变得微不足道。

第二个(也是我认为更有前途的)选择是让一行代表一个具有最小值和最大值的值范围。这会使查询稍微复杂一些(我假设用于检查标识符是否正在使用的查询将是查询“最低低于X”和“最高高于X”的范围),但会导致行数更少,并且可能更易于管理和更新。

我欢迎任何意见,如果这是一个好方法,或者如果我没有一个明显更好的方法,那么我将不愿意提出任何意见。

最佳答案

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

CREATE TABLE customer_range
        (
        customerId INT,
        rgStart INT,
        rgEnd INT,
        PRIMARY KEY (customerId, rgStart),
        UNIQUE KEY (rgStart)
        )

要查询客户所属的号码,请使用以下命令:
SELECT  customerId
FROM    customer_range
WHERE   rgStart <= $mynum
        AND rgEnd >= $mynum
ORDER BY
        rgStart DESC
LIMIT 1

关于mysql - 在关系数据库中表示数字范围(MySQL),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5868907/

10-11 03:33
查看更多