English 中文(简体)
在我的SQL中,我为什么必须界定外凯关系?
原标题:In MySQL, why do I have to define ForeignKey relationships?

Why can t I just leave those relationships out?

是什么点?

我可以 queries问,把自己当作一种关系对待。

最佳回答

是的,你总是能够排除外国的主要制约因素,但你将对你的数据的完整性负责。 如果你使用外国关键制约因素,那么你就不得不对表格中的参考性完整性表示担忧。 http://en.wikipedia.org/wiki/Referential_integrity”rel=“nofollow”>Wikipedia 。 我也将尝试用下文的一个实例来解释。

想出一种购物假想。 您有三个表格:item ,shopping_cartshopping_cart_item。 你们可以选择不界定这些表格之间的任何关系,而这种关系对任何解决办法都是罚款的。 当用户开始购物时,你添加了<条码>购物-cart<>条码>。 由于用户在其购物单上添加了物品,因此,在<条码>购物_cart_item表上添加了行文,从而节省了这一信息。

这一步骤可能会出现一个问题: 如果您有一部分配不正确的<条码> 购物_cart_id s至shopping_cart_items的gy,那么你肯定会以不正确的数据结束! 是的,如果分配的补贴实际上存在于<条码> 购物_cart表格中,你甚至会遇到外国的关键限制。 但是,当外国钥匙存在时,这一错误将更容易发现,因为它不会插入<条码> 购物_cart_item。 外国关键制约因素失败时的记录。

让我们继续假设,你的法典不是好奇,你赢得的正直是第一手。 然后,用户突然想要停止购物并删除该车,而你选择通过删除<条码>购物_cart和<条码>购物_cart_item。 然后,你必须删除两个单独询问的表格中的条目。 如果在你删除<条码>购物_cart条目后出现错误,那么你将再次出现一个参考性廉正问题: 页: 1 然后,你必须实行交易管理,努力向您的业务逻辑提供数据,说明数据存取层的错误。

在这种情况下,外国钥匙可以挽救生命。 您可以确定一个外国关键制约因素,防止插入任何>的不正确<>/em>数据,并且你可以确定将自动删除相关数据的公司业务。

如果没有任何不明确之处,就只能发表评论,我可以改进答案。

问题回答

Apart from what the others have said about why you technically want (actually: need) them:
foreign key constraints also document your model.

在研究一种没有家庭限制的模型时,你对这个模式没有任何想法。 但是,随着科索沃武装部队的限制,你立即看到事情如何共同存在。

您创立了Proceent KEY,以指示数据库发动机,确保你永远不会在数据库上采取行动,建立无效的记录。

因此,如果你在<编码>用户.id和visits之间建立了签名KEY关系。 发动机将拒绝采取任何导致<条码>使用<>条码>的行动。 <代码><<>>>在<编码>上不存在>用户。 这可能是在<条码>上添加一个不为人知的<条码>>>>>使用<>条码>至<条码>,从<条码>上删除一个<条码>id,在<条码>上已经存在的<条码>用户/代码>,或将任何领域更新为“突破”关系。

正因如此,序言部分和附文KEY被称作“referentiallau>/em>制约因素。 你们的数据库发动机如何保持数据正确性。

不允许你进入另一个表格中不存在的补贴,例如,如果你有产品,而且你保留了所有人Id,则通过创建外国钥匙,使所有人背井离乡背书,你不允许用户制作一份标书,该记录拥有者在所有权表中不存在的担保。 http://en.wikipedia.org/wiki/Referential_integrity”rel=“nofollow noreferer” 参照标准

“entergraph

The foreign key constraint helps you ensure referential integrity.

如果你删除一个表格中的一行,那么,我的sql可以自动删除其他表格中被删除的行文通过外国钥匙提及的所有行文。 你们还可以拒绝删除指挥。

另外,当你试图插入一行时,我方设法自动在其他表格中开辟新行,因此外国钥匙并不指任何东西。

That is what referential integrity is all about.

数据库只能受到申请的影响。 并非所有数据变化都是通过应用进行的,即使假定是这样。 整个时间,人们的变化都直接落在数据库上。 所有数据都需要适用的规则都属于数据库。 附录一 这非常有助于更新个人价格。 但是,当泡沫决定将所有价格提高15%时,情况会发生。 任何人都不会走过路,一度通过全球倡议改变10 000美元的价格,他们将撰写一份快速文件,以进行更新。 或者说,两个供应商会合在一起,拥有一家公司,你想把所有ie子改成新公司。 这些变化每天都发生于数据库,它们也需要遵守数据完整性规则。

新开发商可能不知道存在外国关键关系的所有地点,从而造成数据不再有用的错误。

没有外国关键制约因素的数据库几乎100%有机会在数据库中出现坏数据。 你们是否真的想要命令你能够确定客户是谁?

THe FKS将阻止你删除已发布命令的客户,或如果你使用公司自然钥匙——名称和名称变更,则所有有关记录都必须随着关键变化而改变。

或者说,你决定把一个新的全球倡议放在一起,抛弃旧的观念,那么,你可能不得不再次指出所有科索沃信托公司的关系(因为你正在使用一个不同的数据传记员或股份公司),而你可能错过一些机会。

在极端情况下,不建立科索沃信托公司关系是不负责任的。 你冒着你公司生意的生命力,因为你认为这样做是痛苦的。 如果你建议不使用FKs,我会知道我会把我公司的数据寄给你,我会向你们开枪。





相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

php return a specific row from query

Is it possible in php to return a specific row of data from a mysql query? None of the fetch statements that I ve found return a 2 dimensional array to access specific rows. I want to be able to ...

Character Encodings in PHP and MySQL

Our website was developed with a meta tag set to... <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> This works fine for M-dashes and special quotes, etc. However, I ...

Pagination Strategies for Complex (slow) Datasets

What are some of the strategies being used for pagination of data sets that involve complex queries? count(*) takes ~1.5 sec so we don t want to hit the DB for every page view. Currently there are ~...

Averaging a total in mySQL

My table looks like person_id | car_id | miles ------------------------------ 1 | 1 | 100 1 | 2 | 200 2 | 3 | 1000 2 | 4 | 500 I need to ...

热门标签