2016-04-02 64 views
0

我有兩個表數據庫表循環引用

  • person_photos

一個一對多的關係(即每個人都可以擁有的照片列表)

eg

person { 
    person_id number, <<THIS IS PK>> 
    person_name varchar, 
    other_columns... 
} 


person_photos { 
    person_photo_id number,<<THIS IS PK>> 
    person_id number, <<THIS IS FK>> 
    photo blob 
} 

我想將其中一張標記爲默認照片。它是確定爲具有在主表參照默認照片

person { 
    person_id number,<<THIS IS PK>> 
    person_name varchar, 
    other_columns... 
    default_person_photo_id number <<Reference to child table>> 
} 

這基本上創建兩個表之間的循環引用。

這種方法有什麼問題嗎? 還有其他更好的方法嗎?

注:

  • 我可以在person_photo表介紹一列標記,其中一個是默認但是我主要介紹在主表此默認照片ID,以避免由joinin照片表

  • 獲得該信息
  • 我還可以創建一個映射表,但我想一起去該方法僅如果有任何問題圓形設計

回答

0

這部分取決於您正在使用的RDBMS。如果你使用的是沒有部分唯一索引的索引(比如MySQL),那麼這可能是你做到這一點的最好方法。

在另一方面,如果你能有部分唯一索引,那麼你可以做如下:

  1. 刪除person.default_person_photo_id
  2. 添加一個布爾person_photos.is_default FILD
  3. CREATE UNIQUE INDEX default_person_photos_idx ON person_photos(person_id) WHERE is_default

然後你不能超過一個,如果您根據person_id where is_default搜索照片,則可以使用該索引,可能爲您節省加入。

因此,在不知道rdbms功能的情況下回答你的問題,我不能說你有更好的辦法,而且你肯定沒有做錯任何事情。但對於一些RDBMS來說,還有更好的方法。

+0

謝謝克里斯!我正在使用MariaDB – ybn

+0

在這種情況下,您的方法可能是您可以做的最好的方法。 –