簡體   English   中英

MySQL中的一對多關系表

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

這一切都取決於類型的業務規則。 我對以下建議采取了一些規則,如果有任何錯誤,請告訴我:

  • 屬性只能有一種事務類型
  • 一個屬性可以有多個類別
  • 屬性可以有多個子類別
  • 一個類別不能與其他類別共享其子類別(即。(我知道這有點做作)如果你想要在Residential下面的Residential_ZZZ子類別,那么你必須創建一個全新的子類別,如果你想要一個同名的子類別( Residential_ZZZ)商業廣告。)

表設計:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM