Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 多级唯一索引(数据库)_Mysql_Database_Database Design_Erd - Fatal编程技术网

Mysql 多级唯一索引(数据库)

Mysql 多级唯一索引(数据库),mysql,database,database-design,erd,Mysql,Database,Database Design,Erd,假设我们有3个表(分层) 表A id, name, .... 表B id, a_id, name 表C id, b_id, name 我想在表C上创建唯一的索引(a_id,name),而不是(b_id,name),不需要冗余,并在每个表中插入a_id 您的需求与关系数据库的设计原则相冲突 我假设从C到A的索引应该反映从C到B,然后从B到A的关系的传递闭包。现在,如果C本身包含到A的链接,如果B记录B将其关联从a1更改为a2会发生什么?相应的C记录不会注意到这一点,因此事实上,从它们到a1的

假设我们有3个表(分层)

表A

id, name, ....
表B

id, a_id, name
表C

id, b_id, name

我想在表C上创建唯一的索引(a_id,name),而不是(b_id,name),不需要冗余,并在每个表中插入a_id

您的需求与关系数据库的设计原则相冲突

我假设从C到A的索引应该反映从C到B,然后从B到A的关系的传递闭包。现在,如果C本身包含到A的链接,如果B记录B将其关联从a1更改为a2会发生什么?相应的C记录不会注意到这一点,因此事实上,从它们到a1的链接将有自己的含义,而不是与b的含义相连


因此,除非有语义上的原因将C单独链接到a,并将链接存储在C中,否则您必须从C转到be才能找到B的当前状态。

索引不能跨越两个表。
table A (id, name, ....)
^
|
table B (id, a_id, name)
^
|
table C (id, b_id, name)