定义外键和表关系是否对编写查询有影响?

时间:2011-02-18 01:19:45

标签: sql mysql sqlite foreign-key-relationship

我在Mysql工作台中组合了一个表并定义了多对一关系,哪些键是外键等,我知道它将它放在实际的Create脚本中。所以我想知道,这是为了确保数据模型从幕后的角度来看是合乎逻辑的,还是这些关系实际上可以在查询中使用?如果它们可以,那么涉及它们的一些操作是什么? (简短的示例代码会很精彩)

我现在正在sqlitemanager firefox插件中构建一个SQLite数据库。它没有选择来定义这些东西,我想知道我是否应该关心。 (到目前为止,我只做了非常简单的查询)。

2 个答案:

答案 0 :(得分:4)

实际上,您可以在具有任何列的两个表之间创建连接。拥有主键和外键的全部原因是强制执行2个表之间的关系。换句话说,为了在子表中添加行,您需要将父表的主键用作子表中的外键。否则,插入将失败。

使用外键的另一个原因是允许父表执行级联删除。这样,您不必先从子表中手动删除行,然后从父表中删除....如果正确设置了级联删除,则只需删除表行,所有子行都将也走了。

也就是说,如果您不想将该特定列明确定义为外键,您仍然可以毫无问题地执行查询,但这会使您的同事难以阅读ER图,因为2个表之间的关系没有明确定义。

答案 1 :(得分:1)

外键非常有用。假设您有国家和城市的应用程序。

Country
id
name

City
id
name
countryId

每个城市都有一个外键,说明该城市所在的国家/地区。因为您已将“城市”表中的“countryId”定义为指向“国家/地区”表格中“ID”列的外键您可以让MySQL在删除国家时自动删除所有相应的城市。