如何正确设计SQL schema中的两张表:房产租客库租金字段关联疑问
数据库设计优化方案
1. 表关联逻辑
房产和租客属于一对多的关联关系(一套房产可对应多个租客,单个租客同一时间仅租住一套房产,特殊多租场景可单独调整为多对多关联),你需要在tenant表中新增外键字段关联房产表的主键。
另外你当前的property表主键设计不合理:Eircode是爱尔兰地区的房产唯一邮编,属于字符串类型的固定业务编码,不能设置为int类型的自增主键,建议单独新增自增的property_id作为房产表主键,Eircode设为唯一非空字段即可。
2. 租赁费用字段存放方案
根据你的业务场景二选一即可:
- 若同一套房产下所有租客的月度租金完全统一:
CostOfRental字段保留在property表即可 - 若同一套房产下不同租客租金可能存在差异(如主卧/次卧租金不同、租客有单独优惠等):将
CostOfRental字段移到tenant表中
3. 修正后的表结构示例
这里按「同房产租客租金可能不同」的通用场景给出SQL:
CREATE TABLE property ( property_id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, Eircode varchar(20) NOT NULL UNIQUE COMMENT '房产邮编编码', MaxCapacity int(10) NOT NULL COMMENT '最大可住租客数', NumberOfTenants int(10) NOT NULL DEFAULT 0 COMMENT '当前租住租客数' ); CREATE TABLE tenant ( tenantID int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, property_id int(11) NOT NULL COMMENT '租住房产ID', tenantName varchar(30) NOT NULL COMMENT '租客姓名', tenantEmail varchar(50) NOT NULL COMMENT '租客邮箱', tenantPhone varchar(20) NOT NULL COMMENT '租客手机号', CostOfRental int(10) NOT NULL COMMENT '月度租赁费用', FOREIGN KEY (property_id) REFERENCES property(property_id) );
注:你之前的SQL存在字段间遗漏逗号的语法问题,上述代码已修正。
内容的提问来源于stack exchange,提问作者markson
相关产品推荐
相关产品推荐

