我知道這個事實,如果我使用Django的ORM,每個表都必須有一個主鍵列。不知怎的,如果有一個鏈接到桌的MANY_TO_MANY表(讓我們稱他們爲作者和書籍),你會得到這樣的:我可以在django(python)的MySQL表中避免多餘的主鍵列嗎?
id author_id book_id
1 1 1
2 1 2
3 2 3
etc.
我也遇到過,其中建議,以避免列「ID」一書,而是創建一個複合主鍵。這是否與Django解決?
我知道這個事實,如果我使用Django的ORM,每個表都必須有一個主鍵列。不知怎的,如果有一個鏈接到桌的MANY_TO_MANY表(讓我們稱他們爲作者和書籍),你會得到這樣的:我可以在django(python)的MySQL表中避免多餘的主鍵列嗎?
id author_id book_id
1 1 1
2 1 2
3 2 3
etc.
我也遇到過,其中建議,以避免列「ID」一書,而是創建一個複合主鍵。這是否與Django解決?
您可以在您的通過表(使用ALTER TABLE)上創建一個複合主鍵。您也可以從表中刪除id列。由於ManyToMany字段在後端工作的方式,這些都不會損害django,所以它們不會使用id列。
但是你應該注意到讓複合PK在Django中工作基本上是一個非首發。這不應該是一個問題,因爲沒有表應該有一個ForeignKey到你的表中(至少因爲我能想到的任何原因)。
因此總的來說,複合主鍵不適用於django。所以如果你需要將一個ForeignKey放到一個帶有複合PK的表中,那麼你基本上是SOL。最後,在這裏沒有真正的使用複合PK的專業人士,但是沒有真正的合適的(在這個和唯一的情況下)。你花你的時間去擔心這個?
我感興趣的論點/反對。哪裏的文章? – Sonny
對於一個鏈接表,你不需要直接訪問它。只要使用Django的ManyToManyField,並指定鏈接表使用'through'參數。請參閱:https://docs.djangoproject.com/en/dev/topics/db/models/#many-to-many-relat ionhips –
@Sonny:我寫了*文章*並且指* book *。它的標題是** SQL Antipatterns:避免由** Bill Karwin **編寫的數據庫編程**的陷阱。他指出,如果你必須在'author_id'和'book_id'上放置一個複合唯一約束(在上面的例子中)。如果你這樣做,複合鍵將具有與'id'列相同的屬性。所以它變得多餘。這段話很長,並有更多的論據,但我認爲這是它的本質,如果我沒有弄錯,那就是。 :-) – Aufwind