请您解释一下为什么在创建表时必须指定那些外键?我的意思是,我创建了两个表,它们具有一对多的关系(在ER-图上),但是我没有指定外键和引用。我可以使用WHER-子句连接表,甚至可以执行联接等等。
也许,我没有一些基本的概念,虽然我读过一些关于它的东西。我想这与数据的一致性或引用的完整性有关。
那么,你能解释一下这些概念吗?如果我有8-10个表,具有一对多的关系,如果我能够确保数据被正确地插入到数据库中,那么这些引用和外键是绝对必需的吗?
发布于 2015-05-17 13:55:00
没有必要指定外键关系。这只是个好主意。
指定关系时,数据库确保关系的完整性。也就是说,它确保外键列中的值是合法值。
此外,当值被更新或删除时,外键上的cascade选项是一个很大的帮助。
发布于 2015-05-17 13:54:43
之所以有必要,是为了确保数据完整性。
假设您有一个名为orders的表和一个名为order details的表,这两个表都有一个名为order id的列。
如果不使用外键,则可能要为orders表中不存在的订单插入订单详细信息。
如果尝试将订单详细信息添加到不存在的订单中,拥有外键将使数据库引发错误。
如果删除已经有详细信息的订单,也会引发错误,除非您首先删除订单详细信息或在外键上指定级联删除。
发布于 2015-05-17 13:55:36
外键约束的驱动程序需要“数据完整性”。数据库管理系统(数据库服务器软件)帮助您在指定外键约束时防止意外(无意)修改数据。就好像你在帮助DBMS帮助你一样。因此,如果您指定约束,例如,当该产品有未执行的product时,可能会防止意外删除该orders。
您会同意,当您在创建数据库(表)时仔细分析这些约束并在SQL中指定它们时,它将有助于确保完整性。
当您选择将“实体的知识”保存在数据库级别本身时,这是非常有用的。这是一个很好的开始方法,因为您的表(关系)或多或少是自成体系的。另一种方法是将所有这些一致性检查都放在高于数据库的级别上。例如,这是Rails这样的MVC框架所采用的方法,其中模型是应用约束的层,表本身不需要指定外键和其他约束。
通常,哪种方法更适合你的口味,但你应该在它们的精神中使用积木。
https://stackoverflow.com/questions/30287442
复制相似问题