0

我试图找出关联国家、地区和城镇表的最佳方法。

在我的网站上,我希望用户能够进入一个城镇。然后是可选的国家和地区,这两个都需要输入或根本不输入。

目前我的桌子是这样的

tbl>用户有 townID (FK)

tbl>town has id(PK) townName regionID(FK DEFAULT NULL)

tbl>region 有 id(PK) regionName countryID(FK NOT NULL)

tbl>国家有 id(PK) countryName

我认为可能会进一步将用户与城镇关系吐出:

tbl>用户有 locationID (FK)
tbl>location 有 id (PK) townID(FK) regionID(FK) countryID(FK)

但我认为这是不必要的,只会使问题进一步复杂化?

国家数据库已被填充。我打算建立自己的用户输入的城镇>地区>国家关系的参考。因此,如果用户输入一个没有地区和国家/地区的城镇,那么如果还没有一个没有地区 ID 的同名城镇,那么它会进入没有 regionID 的 tbl>town。对于用户已输入地区和国家 ID 的城镇也是如此。只有我在进入之前检查是否已经存在城镇 > 地区 > 国家关系。稍后在网站开发中,我将根据用户输入的城镇为国家/地区提供 Ajax 建议。

所以对于问题:

我可以设想这样的陷阱,例如重复数据或可能被覆盖的数据。有没有更好的方法来构建表格以适应我想要的方法?

前面的问题可能会回答这个问题:但是我可以做些什么来减少表的 PHP 处理。显然,我更喜欢只插入一个 PHP 语句,但我认为有太多的注意事项不能一次完成。

此外,由于用户的城镇条目可能为空,并且可能包含也可能不包含对区域的外键引用,因此如何最好地创建一个考虑到这一点的视图?

由于它将被托管,我宁愿不使用 MySQL 函数。

如果您需要任何澄清,请告诉我。在继续之前,我真的很想在第一次做到这一点,所以你的帮助将是无价的。

4

2 回答 2

0

接受一个没有地区和国家的城镇名称就像让某人输入他们的名字而没有中间名或姓氏。它是数据,但不是标识符。

富勒顿的全称是“美国加利福尼亚州富勒顿”。通过不需要 Fullerton 的全名,您放弃了外键以实现数据完整性。(“美国加利福尼亚州富勒顿”是一个城市;“美国阿拉巴马州富勒顿”不是。)祝你好运。

如果你走这条路,我能给你的最好建议是摆脱身份证号码。ISO 发布国家和国家分部的标准代码。您可以在Wikipedia中查找它们。存储自然键会将连接数从 3 减少到 0。零连接几乎总是要执行 3 次连接。

您可能需要使用外部连接来创建您的视图。

于 2011-02-19T11:21:50.037 回答
0

我认为您不会减少代码,因为它太明确了。你可以改变它,但它不会更好。

于 2011-02-19T03:57:52.697 回答