我正在努力更好地理解关系数据库,并且有些事情我一直碰到并且不理解。我们来看两个表:
在这种情况下,Login.ID
是设置为auto_increment
的主键,而Profile.ID_LOGIN
是外键。创建用户并将其用户名和密码存储在login
数据库中时,与当前用户名和密码对应的ID
会自动添加到ID_LOGIN
中,还是必须创建SQL语句要做到这一点吗?
如果我必须创建一个SQL语句,我应该如何添加ID_LOGIN
以确保我正确添加它?
答案 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编程,它将为您设置外键并经常进行所需的连接。