我正在学习如何使用mysql构建一个房地产网站。我想创建一个propertyDetail表来存储每个公寓的细节,似乎有意义的是使用公寓的地址作为主键,但是每个公寓地址都由单位信息组成(例如,单元A,5楼,第2块),建筑物名称,街道名称和街道名称,城市,邮政编码,国家,我不确定表现明智是否是一种好的做法。
此外,如果有人输入了一个带有建筑物名称的地址,但是另一个人输入了没有建筑物名称的相同地址信息,则两者都有效,但是mysql会将它们视为不同的公寓,因为复合键不一样。
另一个例子是有人输入“单元A,第5层,第2单元”,另一个人输入“单元A,5 / F,块2”。我应该怎么处理?我应该使用别的东西作为主键吗(我想不出其他字段可以代表地址以外的独特公寓)?
如果我应该坚持使用主键的地址,我是否应该使用hash()之类的函数来生成一个唯一的键来存储作为性能原因的主键?
如果有些专家可以分享一些见解,我感激不尽。
答案 0 :(得分:0)
主键的目的是确保表中记录的唯一性。街道地址的唯一性可以实现,但需要付出一些努力。以下是问题:
要克服这些问题并实现地址的唯一性,您需要在存储到数据库之前验证,更正和标准化它们。当您对密钥进行查询时,查询中的计数器地址需要以相同的方式进行清理。我们为此目的提供了一些工具,包括YAddress(由我工作的公司制作)。
由于各个街道地址在其相应的邮政编码(美国地址)中是唯一的,因此您可以包含街道地址和邮政编码的密钥,为简洁起见省略城市和州。更好的方法是使用由Zip和街道地址列组成的双列主键。这样你就可以获得Zip的额外奖励。