gpt4 book ai didi

mysql - 理解/mySQL 也就是在 Django 中欺骗外键关系

转载 作者:可可西里 更新时间:2023-11-01 08:54:51 30 4
gpt4 key购买 nike

所以我继承了一些django。

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 Jockey,但我知道“真正的”外键关系看起来类似于此通知 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;

我想知道的是:

  1. 我希望通过这种“诡计”看到什么问题。
  2. 虽然这似乎有效 - 是否推荐或建议。
  3. 是否建议我们将 SQL 修改为 add in the constraint

非常感谢!

最佳答案

  1. 没有实际约束可能会导致引用损坏、父项无效和其他类型的数据不一致。我不是 Django 专家,但我敢猜测,在大多数情况下,Django 仍能很好地处理关系,除非您有意添加一些无效记录。

  2. 通常,如果您的 RDBMS 支持外键约束,则绝对没有理由不使用它们,忽略它们可能会被视为设计缺陷。

  3. 您应该考虑添加键约束。它们不仅可以让您的 DBMS 了解如何优化查询,还可以确保数据的一致性。我很确定 Django 在某处有一个设置,它会在您运行 manage.py syncdb

  4. 时自动生成 SQL 以添加键约束

有关为什么您应该更喜欢外键的更多信息,您应该阅读 MySQL Foreign Key Documentation

最有趣的是:

InnoDB requires indexes on foreign keys and referenced keys so that foreign key checks can be fast and not require a table scan. In the referencing table, there must be an index where the foreign key columns are listed as the first columns in the same order. Such an index is created on the referencing table automatically if it does not exist. (This is in contrast to some older versions, in which indexes had to be created explicitly or the creation of foreign key constraints would fail.) index_name, if given, is used as described previously.

关于mysql - 理解/mySQL 也就是在 Django 中欺骗外键关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6788558/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com