我有四个表;位置,楼层,typeOfProperty和功能。 位置表是具有列的最基本的表; locationLong,locationLat,locationName和propertyName。 locationlong是此表中的主键。 我创建了位置表并使用locationlong作为主键,因为我发现地球上的每个点都有一个唯一的位置经度。这就是如果我认为正值和负值始终是唯一的。(我愿意收集)。>
但是我已经注意到,在某些情况下,我想在某个位置上标识具有建筑物的一层以上的建筑物的属性,因此,我想弄清楚如何构造我的楼层表。我正在考虑将位置长的列和第二个 称为楼层编号的列,这样这两个列都将成为此表的复合主键。
第三个表称为typeOfProperty。这是我要在其中具有不同列的表,这些列选择可以在特定楼层上的属性的类型。即一个地板可以有许多房屋要购买,许多房屋要出租,商业物业要出售等,因此我创建了以下列;
hseBuyOrLetOrFurn ENUM('buy', 'let', 'furn') - SELECT IF HOUSE IS TO BUY, LET,
OR FULLY FURNISHED
comspaceBuyOrLease ENUM('buy', 'lease') - TO SELECT IF COMMERCIAL SPACE IS BUY
OR LEASE
cost INT -- TO CAPTURE COST OF PROPERTY ETC.
我想知道在此表中用作主键的内容。
第三张表称为一般功能。此表的列包含显示特定类型的属性特征的列,例如,它包含用于列示卧室,闭路电视,游泳池,浴室,电梯等的数量的列。 我还有其他与一般功能类似的表格,如下面的代码所示。
请协助我了解如何在此表中找出主键和外键。
CREATE TABLE `location` (
`locationLong` decimal(11,8) NOT NULL,
`locationLat` decimal(10,8) NOT NULL,
`locationName` varchar(35) NOT NULL,
`houseNumber` int(11) DEFAULT NULL,
PRIMARY KEY (`locationLong`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `floors` (
`locationLong` decimal(11,8) NOT NULL,
`locationLat` decimal(10,8) NOT NULL,
`locationName` varchar(35) NOT NULL,
`id` int(11) DEFAULT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`ld`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `propertytype` (
`locationLong` decimal(11,8) NOT NULL,
`locationLat` decimal(10,8) NOT NULL,
`hseBuyOrLetOrFurn` enum('buy','let','furn') DEFAULT NULL,
`bedrooms` int(11) DEFAULT NULL,
`gatedOrSloneOrApart` enum('gated','slone','apart') DEFAULT NULL,
`hotelOr` tinyint(4) DEFAULT NULL,
`gdwnBuyOrLease` enum('gdwn','lease') DEFAULT NULL,
`landBuyOrLease` enum('buy','lease') DEFAULT NULL,
`comspaceBuyOrLease` enum('buy','lease') DEFAULT NULL,
`twoDImage` blob,
`threeDImage` blob,
`vRVideo` blob,
`cost` int(10) unsigned NOT NULL,
`location_locationLong` decimal(11,8) NOT NULL,
PRIMARY KEY (`locationLong`),
KEY `fk_propertyType_location_idx` (`location_locationLong`),
CONSTRAINT `fk_propertyType_location` FOREIGN KEY (`location_locationLong`) REFERENCES `area` (`locationLong`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `generalfeatures` (
`locationLong` decimal(11,8) NOT NULL,
`locationLat` decimal(10,8) NOT NULL,
`livingAreaAndSize` int(11) NOT NULL,
`bedrooms` int(11) NOT NULL,
`bathrooms` int(11) NOT NULL,
`masterEnsuite` tinyint(1) NOT NULL,
`bedroomsWithBathrooms` tinyint(4) NOT NULL,
`kitchenAndSize` tinyint(4) NOT NULL,
`parkingAndSlots` tinyint(4) NOT NULL,
`swimmingPool` tinyint(1) NOT NULL,
`liftsAndNumber` tinyint(4) NOT NULL,
`CCTV` tinyint(1) NOT NULL,
`sizeOfLand` int(11) NOT NULL,
`borehole` tinyint(1) NOT NULL,
`propertyType_locationLong` decimal(11,8) NOT NULL,
PRIMARY KEY (`locationLong`),
KEY `fk_generalFeatures_propertyType1_idx` (`propertyType_locationLong`),
CONSTRAINT `fk_generalFeatures_propertyType1` FOREIGN KEY (`propertyType_locationLong`) REFERENCES `propertytype` (`locationLong`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `hotelfeatures` (
`locationLong` decimal(11,8) NOT NULL,
`locationLat` decimal(10,8) NOT NULL,
`conference` tinyint(1) NOT NULL,
`fibreCable` tinyint(1) NOT NULL,
`spa` tinyint(1) NOT NULL,
`freshOutdoor` tinyint(1) NOT NULL,
`laundryFacilities` tinyint(1) NOT NULL,
`entertainment` tinyint(1) NOT NULL,
`wifi` tinyint(1) NOT NULL,
`propertyType_locationLong` decimal(11,8) NOT NULL,
PRIMARY KEY (`locationLong`),
KEY `fk_hotelFeatures_propertyType1_idx` (`propertyType_locationLong`),
CONSTRAINT `fk_hotelFeatures_propertyType1` FOREIGN KEY (`propertyType_locationLong`) REFERENCES `propertytype` (`locationLong`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `outdoorfeatures` (
`locationLong` decimal(11,8) NOT NULL,
`locationLat` decimal(10,8) NOT NULL,
`gym` tinyint(1) NOT NULL,
`matureGardens` tinyint(1) NOT NULL,
`partyArea` tinyint(1) NOT NULL,
`gardenAndSize` tinyint(1) NOT NULL,
`waterFront` tinyint(1) NOT NULL,
`propertyType_locationLong` decimal(11,8) NOT NULL,
PRIMARY KEY (`locationLong`),
KEY `fk_outdoorFeatures_propertyType1_idx` (`propertyType_locationLong`),
CONSTRAINT `fk_outdoorFeatures_propertyType1` FOREIGN KEY (`propertyType_locationLong`) REFERENCES `propertytype` (`locationLong`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1
我想大致了解具有位置详细信息的位置表,具有楼层类型详细信息的楼层表的链接,链接至不同属性类型的属性类型表的链接,以及最终该属性类型表如何链接至一般功能,酒店功能和室内功能表。
答案 0 :(得分:0)
您有一个表来保存属性主数据(此表稍后会根据需要向其中添加更多字段,直到获得表的最终设计为止) 例如:main_property_file(property_id PK,address,GPS_location) 然后您需要知道它是用于租赁还是出售, 构建查找表保存此内容,例如:property_for(用于PK的类型,命名为此) 并在先前的main_property_file中添加一个类型,作为外键 依此类推,直到您放置所有业务数据结构,然后再检查表和关系的一致性,如果您无法想象关系和每个表所保存的数据,可以将其放在可视化工具中,最后向模型查询查找信息或输入新数据等,以确保您的表设计完整,并查看约束。