所以我繼承了一些django。瞭解/ mySQL又名欺騙Django中的ForeignKey關係
MySQL表很簡單,其中父母是不是一個FK的關係只是「父」 ID:
CREATE TABLE `Child` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`parent` int(10) unsigned NOT NULL,
`name` varchar(255) NOT NULL,
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=24;
但隨後的鼻祖這樣做..
class Child(models.Model):
"""Project Child information"""
id = models.AutoField(primary_key=True)
parent = models.ForeignKey(Parent)
name = models.CharField(max_length=255)
class Meta:
managed = False
誠然,我不是一個SQL騎師,但我知道一個「真正的」外鍵關係看起來類似於這個通知CONSTRAINT
...
CREATE TABLE `Child` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parent_id` int(11) NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `child_63f17a16` (`parent_id`),
CONSTRAINT `parent_id_refs_id_34923e1e` FOREIGN KEY (`parent_id`) REFERENCES `Parent` (`id`)
) ENGINE=InnoDB;
我想知道的是以下內容:
- 我可以期待通過這個「欺騙」看到什麼問題。
- 雖然這似乎工作 - 是否建議或建議。
- 我們會建議將SQL修改爲add in the constraint嗎?
非常感謝!
這真的是一個很好的信息 - 非常感謝您的詳細回覆 - 我當然同意你沒有它的問題。這就是說,你看到的問題只是將它分配爲FK而沒有強加這些限制?這當然會使我的查詢更簡單... – rh0dium
我不知道你的意思是不強制約束。在InnoDB中,當你有'FOREIGN KEY REFERENCES'時,它會自動創建和執行存在約束。您不需要'CONSTRAINT'子句。 – alxbl
措辭不當。你是否看到過在Django中將其定義爲ForeignKey的問題,而不是在db級別上強加它; notice managed = False – rh0dium