gpt4 book ai didi

mysql - 如何使主键不唯一 MySQL

转载 作者:行者123 更新时间:2023-11-29 03:50:05 26 4
gpt4 key购买 nike

我知道主键应该是唯一的。但是我正在为一家房地产代理公司创建一个数据库,其中邮政编码是地址表的主键。但是,如果一处特性是出售/出租的,并且它位于一栋公寓楼中,那么许多特性将具有相同的邮政编码。我如何在将 PostCode 保留为 PK 的同时使其成为 Not Uniqe?谢谢你

到目前为止我的代码:

CREATE TABLE `Properties` (
`PropertyID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`Property Type` varchar(20) NOT NULL,
`PostCode` varchar(8) NOT NULL,
`Bedrooms` tinyint(2) DEFAULT NULL,
`Bathrooms` tinyint(2) DEFAULT NULL,
`Ensuite` tinyint(1) DEFAULT NULL,
`Kitchen` tinytext,
`LivingRoom` tinytext,
`DiningRoom` tinytext,
`UtilityRoom` tinytext,
`Conservatory` tinytext,
`Garage` tinytext,
`Garden` tinytext,
`Furnished` tinytext,
`Type` char(15) NOT NULL,
PRIMARY KEY (`PropertyID`),
KEY `Property Type` (`Property Type`),
KEY `PostCode` (`PostCode`),
CONSTRAINT `Properties_ibfk_2` FOREIGN KEY (`PostCode`) REFERENCES `Address` (`PostCode`),
CONSTRAINT `Properties_ibfk_1` FOREIGN KEY (`Property Type`) REFERENCES `PropertyType` (`Property Type`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1





CREATE TABLE `Address` (
`PostCode` varchar(8) NOT NULL,
`HouseN` text NOT NULL,
`AddL1` varchar(25) NOT NULL,
`AddL2` varchar(25) DEFAULT NULL,
`AddL3` varchar(25) DEFAULT NULL,
`County` char(20) NOT NULL,
PRIMARY KEY (`PostCode`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

最佳答案

主键在定义上是唯一的;更好的方法是使用代理键(如自动编号值)或覆盖多列的复合键,例如邮政编码和属性名称/编号。

当然要注意,在某些国家(如英国),特定属性(property)的邮政编码可能会随着时间的推移而变化;因此,我提倡代理键方法。

关于mysql - 如何使主键不唯一 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19788698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com