Java 外键在MySQL中的应用/效用是什么?
请允许我用一个例子详细说明这个问题。我在办公室写信 透视 (1) 字节码不应用于实现已经存在的逻辑 在数据库引擎中实现(希望更有效)(例如,如果 需要从500行SQL查询结果中筛选出20行, 我们应该写一个更好的where子句),而且 (2) 我只有一个概念 了解外键(例如,它们会自动创建、管理和执行 跨不同表维护数据完整性所需的约束)Java 外键在MySQL中的应用/效用是什么?,java,mysql,Java,Mysql,请允许我用一个例子详细说明这个问题。我在办公室写信 透视 (1) 字节码不应用于实现已经存在的逻辑 在数据库引擎中实现(希望更有效)(例如,如果 需要从500行SQL查询结果中筛选出20行, 我们应该写一个更好的where子句),而且 (2) 我只有一个概念 了解外键(例如,它们会自动创建、管理和执行 跨不同表维护数据完整性所需的约束) 现在,让我们考虑一个简单的模式,其中有4个表和15个列。 如下所示(假设所有列均不为空): 期望值(请回答以下6项的正确/错误) 可以使用外键如上所述创建表关系
现在,让我们考虑一个简单的模式,其中有4个表和15个列。 如下所示(假设所有列均不为空):
期望值(请回答以下6项的正确/错误)1。可以如上所述创建表关系,外键指向同一表的不同行 否,FK只能指向一行。但是一行可以被很多其他行引用,比如一个地址可以被很多人引用 2。如果人员中缺少relof或relto,则向关系添加行将引发SQLException 对 3。如果我们在地址中添加一行,则不需要检查z2cs中是否有zipcode-缺少zip会引发SQLException 对 4。如果在人员中使用了aid,尝试从地址中删除行将引发异常 是,如果FK中没有级联删除,则会自动删除 加入人而不是失败 5。如果在relto或relof列的关系中使用pid,则尝试从人员中删除行会导致错误 是的,见第4条 6。存在一条SQL语句,可以让您找到表中哪些列是外键,它们引用了哪些表(列)(我知道“描述表名”不起作用,尽管我觉得应该这样做) 阿法克。MySQL中应该有一个信息模式,您可以从中查询信息 B1。relof和relto不能相同 在更新或插入时使用触发器来验证这一点。PostgreSQL知道检查约束,这可能在MySQL中也可用,但您可以选择触发器 B2。relof和relto的组合是独一无二的
这两列上的组合唯一索引是您的朋友。那么您将如何创建关系表呢?逻辑是记录同一表中两行的关系。它是否违背了一些关系数据库原则?那么,什么是AFAIK?据我所知,您的关系表非常好(AFAIK)
people
pid bigint autoinc PK
fname varchar(32)
lname varchar(32)
dob date
sex char(1)
addyID bigint FK to address(aid)
relationship
relof bigint FK to people(pid)
relto bigint FK to people(pid)
relis tinyint
address
aid bigint autoinc PK
street varchar(128)
zipcode int FK to z2cs(zip)
z2cs
zip int PK
city varchar(64)
state char(2)