我正在为房地产应用程序设计数据库。申请的基本结构如下。
A)应用程序包括存储与之相关的记录 房地产。
B)属性分为类别和事务类型 (出售,出租,租赁)等。
c)类别分为子类别。
例如,存在以下记录。
Transaction = Rent , Sale, Lease.
Categories = Residential , Commercial , Industrial , Agricultural
SubCategories = Residential_Apartment (belongs to residential category)
Villa/House (belongs to residential category)
Commercial_OfficeSpace (belongs to commercial category)
Commercial_Plot (belongs to commercial category)
Industrial_Plot (belongs to industrial category)
我必须在属性和上面所有三个之间创建一个关系,以确定存储哪个属性,例如
Property with id:1 is Transaction:Rent, Category:Residential, Subcategory:Villa/House
Property with id:2 is Transaction:Sale, Category:Residential, Subcategory:Residential_Apartment
Property with id:3 is Transaction:Lease, Category:Commercial, Subcategory:Commercial_Officespace
我目前的表格结构如下
CREATE TABLE IF NOT EXISTS `transaction` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`transactionName` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`categoryName` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `subcategory` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`subCategoryName` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `property` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL,
`transaction_id` int(11) NOT NULL,
`category_id` int(11) NOT NULL,
`subcategory_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
编辑:
我的问题是。
看到它们之间的关系,这是存储记录的正确方法吗?我主要关心的是类别和子类别表,因为现在我无法考虑将来可能发生的设计缺陷。我只是想知道如果你被告知要设计类似的东西,你将如何将记录存储在表中。主要是类别和子类别部分。答案 0 :(得分:1)
如果子类别属于一个类别,则应使用外键约束强制执行:
CREATE TABLE IF NOT EXISTS `subcategory` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`category_id` int not null,
`subCategoryName` varchar(50) NOT NULL,
PRIMARY KEY (`id`) ,
CONSTRAINT FK_subcategory_category_id FOREIGN KEY(category_id)
REFERENCES category(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
property
表不应该只有category_id
,只有subcategory_id
(这是FK到subcategory.id
)
答案 1 :(得分:1)
这完全取决于类型的业务规则。我假设以下建议有几条规则,如果有任何错误,请告诉我:
表设计:
Property
ID
TransactionType_ID
TransactionType
ID
Category
ID
这是inheritance structure btw
SubCategory
ID
CategoryID
Name
Property_Category_List
PropertyID
CategoryID
Property_SubCategory_List
PropertyID
SubCategoryID
我认为有一种方法可以清理类别/子类别,但我现在无法想到它,而且它实际上取决于业务规则。
在您当前的架构下,您至少需要一种方法将子类别与其现有类别联系起来(通过包含CategoryID完成上述操作。此外,您的属性只能有一个类别和子类别,因为它们只有属性中有一列。如果你计划有多个类别或子类别,那么你需要我在最后两个表中创建的列表/地图结构。这是这里唯一的两个主要变化