数据库设计:从城市列表定义数据访问

时间:2009-04-28 10:46:36

标签: database-design

我正在尝试构建一个API,用于提供各个城市的数据。

目前,有一个名为 APIPriv 的表,其中包含以下列:

===================================================
  idApiPriv | idClient | Daily | Hourly | DevKey
===================================================
      1     |    23    |  'Y'  |  'N'   |[MD5 Hex]

idClient 是客户端表的外键。

每日每小时是数据类型 - “ Y ”表示客户/开发人员可以访问数据并且“ N '表示他/她没有。

DevKey 是一个自动生成的MD5字符串,提供给开发人员,用作开发人员密钥。

现在,对于每个有权访问API的开发人员,数据库还需要存储与每个开发人员关联的城市列表。开发人员只会回收这些城市的数据。

如何在数据库中定义它?列表中的城市数量不固定。开发人员可以访问5个城市,另一个访问10个城市,另一个访问7个城市。

(已经有一个主 City 表,其中包含1500个城市的列表,当然,每个开发人员的城市列表都需要是此数据的子集。)

4 个答案:

答案 0 :(得分:2)

您需要一个城市的关联表,其效果如下:

 idDevCityPriv | idApiPriv | idCity
====================================
      1              1         34
      2              1         42

然后,为了得到你的城市列表,它会是这样的(假设你有一个DevKey):

select
    c.*
from
    APIPriv a
    inner join DevCityPriv d on a.idAPIPriv = d.idAPIPriv
    inner join City c on d.idCity = c.idCity
where
    a.DevKey = [DevKeyVariable]

干杯,
埃里克

答案 1 :(得分:1)

添加另一个包含2列的表 - idClient和Cities表中的id。

然后,对于开发者有权访问的每个城市,请在此表中添加一个条目。

答案 2 :(得分:1)

您需要另一个包含两列的表,一列用于DevKey,另一列用于CityID。这将允许您从开发人员到城市进行一对多的加入。

我还建议你将每日和每小时更改为布尔值[true | false]而不是char或者有点[0 | 1]。这些将更好地适应逻辑条件并具有更严格的可能值,即只有两个而不是'y','Y','n','N','x'等。

答案 3 :(得分:1)

我建议使用所谓的连接表或链接表:

DevKey       CityId
101          1 
101          7
101          4

此表定义哪些开发人员可以访问哪些城市,从而提供开发人员与城市之间多对多关系的基础,这些关系无法直接建模。

您可能希望在此表中保留一些额外信息,例如角色开始日期和结束日期,从而您可以结束开发人员访问某个城市的日期。