更好地理解数据库表之间的关系

时间:2012-10-18 10:58:37

标签: sql database-design

我正在努力更好地理解关系数据库,并且有些事情我一直碰到并且不理解。我们来看两个表:

enter image description here

在这种情况下,Login.ID是设置为auto_increment的主键,而Profile.ID_LOGIN是外键。创建用户并将其用户名和密码存储在login数据库中时,与当前用户名和密码对应的ID会自动添加到ID_LOGIN中,还是必须创建SQL语句要做到这一点吗?

如果我必须创建一个SQL语句,我应该如何添加ID_LOGIN以确保我正确添加它?

7 个答案:

答案 0 :(得分:1)

您应该创建SQL语句以将记录添加到Profile表中。 FK约束不允许您添加不在Login表中的ID_LOGIN,因此您不必手动检查它。

答案 1 :(得分:1)

当您使用外键向tbale中插入行时,必须事先确保您尝试插入外键列的值存在于链接表中。

换句话说:当您尝试在ID中插入一行时ID_LOGIN设置为25,并且在ID为25的登录表中不存在任何行,则会出现错误。

答案 2 :(得分:1)

不会自动添加。 您必须使用create statement添加它。如果您希望自动添加它,则必须使用Login表创建触发器。

答案 3 :(得分:1)

创建个人资料记录时,您需要确保已链接正确的登录记录。

例如,对于一个名叫John Smith的人,他收到了一封jsmith@thecompany.com的电子邮件,并且拥有johns /密码的用户/通行证组合

Insert into Profile values ('John Smith', jsmith@thecompany.com, (select ID from Login where user = jsmith))

将创建一个链接回您的登录记录的个人资料。

答案 4 :(得分:1)

您将始终必须创建SQL查询以将其添加到“配置文件”表中。但也许使用过程/触发器/函数,您可以创建一个查询,只要在Login表中添加一行就可以添加它。

答案 5 :(得分:1)

您需要向两个表添加数据(两个插入语句)。首先插入用户并获取其自动生成的ID。然后,您可以使用第一个插入中获得的user_id插入您的配置文件记录。

也就是说,您正在描述一对多关系(用户可能有几个配置文件),但用户和配置文件之间的关系应该是一对一,因为每个用户始终只有一个配置文件,每个配置文件只对应一个用户。

答案 6 :(得分:1)

严格地说,拥有外键只是一个表中的一个字段,它是一个存储对另一个表中记录的引用的地方。因此,您的代码必须填充两个表并设置外键。

数据库具有外键约束的功能,这有助于禁止数据库操作,这会使外键在外键中的值引用的其他表中没有记录的情况下。

在SQL数据库中维护外键的一个非常方便的事情是,当您在查询中需要时,可以轻松地进行连接以获取相关数据。

BTW,Ruby on Rails使用关联管理外键。因此,如果您使用Ruby on Rails编程,它将为您设置外键并经常进行所需的连接。