[英]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.