我正在尝试构建一个API,用于提供各个城市的数据。
目前,有一个名为 APIPriv 的表,其中包含以下列:
===================================================
idApiPriv | idClient | Daily | Hourly | DevKey
===================================================
1 | 23 | 'Y' | 'N' |[MD5 Hex]
idClient 是客户端表的外键。
每日和每小时是数据类型 - “ Y ”表示客户/开发人员可以访问数据并且“ N '表示他/她没有。
DevKey 是一个自动生成的MD5字符串,提供给开发人员,用作开发人员密钥。
现在,对于每个有权访问API的开发人员,数据库还需要存储与每个开发人员关联的城市列表。开发人员只会回收这些城市的数据。
如何在数据库中定义它?列表中的城市数量不固定。开发人员可以访问5个城市,另一个访问10个城市,另一个访问7个城市。
(已经有一个主 City 表,其中包含1500个城市的列表,当然,每个开发人员的城市列表都需要是此数据的子集。)
答案 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
此表定义哪些开发人员可以访问哪些城市,从而提供开发人员与城市之间多对多关系的基础,这些关系无法直接建模。
您可能希望在此表中保留一些额外信息,例如角色开始日期和结束日期,从而您可以结束开发人员访问某个城市的日期。