[英]One to Many relationship table in MySQL
我正在设计一个房地产应用程序的数据库。 应用程序的基本结构如下。
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;
编辑:
我的问题是。
看到它们之间的关系,这是存储记录的正确方法吗? 我主要关心的是类别和子类别表,因为现在我无法考虑将来可能发生的设计缺陷。 我只是想知道如果你被告知要设计类似的东西,你将如何将记录存储在表中。 主要是类别和子类别部分。
如果子类别属于一个类别,则应使用外键约束强制执行:
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
)
这一切都取决于类型的业务规则。 我对以下建议采取了一些规则,如果有任何错误,请告诉我:
表设计:
Property
ID
TransactionType_ID
TransactionType
ID
Category
ID
这是btw的继承结构
SubCategory
ID
CategoryID
Name
Property_Category_List
PropertyID
CategoryID
Property_SubCategory_List
PropertyID
SubCategoryID
我认为有一种方法可以清理类别/子类别,但我现在想不到它,它实际上取决于业务规则。
在您当前的架构下,您至少需要一种方法将子类别与其现有类别联系起来(通过包含CategoryID完成上述。此外,您的属性只能有一个类别和子类别,因为它们只有一个列如果你计划有多个类别或子类别,那么你需要我在最后两个表中创建的列表/地图结构。这是这里唯一的两个主要变化
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.