复合主键,包含两个引用同一表的外键:SQL Server与MySQL

asf*_*adf 3 mysql sql-server database-design

我已经阅读了许多有关数据库表设计的帖子,这些帖子适用于常见的一对多/用户对朋友场景。一个帖子包括以下内容:

用户

* user_id (primary key)
* username
Run Code Online (Sandbox Code Playgroud)

朋友们

* user_id (primary key, foreign key to USERS(user_id))
* friend_id (primary key, foreign key to USERS(user_id))
Run Code Online (Sandbox Code Playgroud)

>这将阻止重复项(IE:1,2)的发生,但不会停止冲销,因为(2,1)有效。您需要一个触发器来强制关系只有一个实例...

粗体部分促使我提出以下问题:SQL Server和MySQL处理这些类型的组合键之间有区别吗?为了确保唯一性,两者是否都需要张贴者提及的触发器?

我问,因为到目前为止,我一直在SQL Server中使用类似的表结构,而没有任何此类触发器。我是否幸运地没有碰到这种潜伏在草丛中的数据复制蛇?

Tho*_*mas 5

是的,所有DBMS都会一视同仁。原因是DBMS假定该列具有含义。即,元组不是由无意义的数字组成。每个属性都有含义。user_id假定与...具有不同含义friend_id。因此,设计者有责任建立一个规则,声称1,2等于2,1。

  • @PolishedTurd-数据库无法通过任何方式知道它是重复项。设计师指出它们是等效的。想象两列是“ manager_id”和“ subordinate_id”。顺序在那里有所作为。一个项目可能有1,2,另一个项目有2,1。 (3认同)