2015-10-23 24 views
2

我有一個使用Postgres的Rails應用程序 - 我需要一些本質上具有相同數據的表。所以我需要一個唯一的鍵來增加我所有的表,所以實際上對所有表的ID有pk約束。 現在,問題是 - 我該怎麼做?我可以編寫一個遷移,該遷移定義所有表的ID,以便爲每個插入增加到這些表的任何一個表中?或者我必須在數據庫級別上執行它?Rails多標識增量

+0

這聽起來像你正在嘗試做一些你不應該做。如果您需要將列限制在多個表中,那麼它們必須是它們之間的關聯,這是在它們之間創建外鍵的一種方式。在這種情況下,您應該將遞增列保留在一個表(可能是一個新表)和外鍵引用其他表中。 –

+0

完全同意奧格茲巫師。我並不真正瞭解這裏的需求。 Single Table Inheritence或'has_one'關係應該起作用。 – Caillou

回答

0

如果兩個表之間有這樣的鏈接,則不應使它們具有相同的主鍵。這不是一個很好的數據庫使用。

您應該將這些表中的一個外鍵給另一個外鍵,並使用此關係來標識兩個表之間的鏈接行。

在Rails中,它被稱爲「HAS_ONE」的關係,這是非常方便的:http://guides.rubyonrails.org/association_basics.html#the-has-one-association

+0

我真的不認爲我同意,當你有兩個表,你只有聯合/減號/攔截查詢 - 爲了在它們之間進行選擇,沒有任何一個外鍵的意思。 – gilmishal

+0

爲什麼你需要完全相同的兩個表,相同的列(如果你將它們聯合起來,我猜它們有相同的列)以及相同的數據呢? – Caillou

+0

把它看作是一個STI,你不會浪費無關數據的空間 - 而且MTI對我的情況也不好 - 因爲每個表本身都是這樣,而且查詢多個表相對於一。 – gilmishal