我知道如何在SQL Server中创建一对多,多对多的关系,但可以创建一对一的关系吗?是否有可能创建1到0或1的关系?Sql中的关系
Sql中的关系
回答
是的,只是把PRIMARY KEY
小号两个实体的成链接表,在两个实体定义UNIQUE
键:
myrel(entityA, entityB, UNIQUE(entityA), UNIQUE(entityB))
因此,如果entityA = 1
有关entityB = 2
:
entityA entityB
1 2
,您可以将entityA = 1
与任何其他entityB
都不相关,也不会将entityB = 2
与任何其他entityA
相关联。
如果关系是对称(即entityA
和entityB
属于相同的域和与entityA
到entityB
也指与entityB
到entityA
),则定义一个额外CHECK
constrant:
entityA entityB
UNIQUE(entityA)
UNIQUE(entityB)
CHECK(entityA < entityB)
和改造与此查询的规范化关系的归一化关系:
SELECT entityA, entityB
FROM myrel
UNION
SELECT entityB, entityA
FROM myrel
这是一个(0-1):(0-1)
的关系。
如果你希望它是一个1:1
关系,定义这个表是两个entityA
和entityB
域:
myrel(entityA, entityB, UNIQUE(entityA), UNIQUE(entityB))
A(id, PRIMARY KEY(id), FOREIGN KEY(id) REFERENCES myrel (entityA))
B(id, PRIMARY KEY(id), FOREIGN KEY(id) REFERENCES myrel (entityB))
通过或者从表的定义中删除FOREIGN KEY
,你改变的相应部分关系从1
到(0-1)
。
是的,只需将从属表中的主键或备用键作为父表中的主键的外键即可。
1到0或1的关系? – 2009-08-07 16:31:13
我所描述的是一个1比0或1的关系。在子表中,父表中的每一行都不必有记录... – 2009-08-07 18:11:59
两种方式: 1)pk-pk 1:1关系。表A和B都有PK。 1关系
或
2)的FK/UC-PK 1:1:1的关系,从B到PK A的PK这使得 'B' 的1的FK侧创建FK。表A有一个PK,而表B有一个到A的外键,但B中的FK不在B的PK上。现在在B的FK字段中创建一个UC。
1到0或1的关系? – 2009-08-07 16:33:33
在方法1中,如何向A和B中插入新条目?方法2最终不是“1比0或1”关系吗? – 2009-08-07 16:53:00
@ArsenMkrt:使FK可以为空。 @Jonathan:方法1很容易插入。由于B依赖于A,所以首先在A中插入行,然后在B中插入行.A不指向B,B只指向A.方法2不是1..0..1的关系,if你让FK不能为空,如果FK边是可选的,它只会被选中。 – 2009-08-09 08:07:06
- 1. RDBMS/SQL中的“关系”与“关系”?
- 2. SQL Server 2005中的关系?
- 3. SQL中的依赖关系
- 4. 代码中的SQL关系
- 5. SQL表中的M:N关系
- 6. SQL表关系
- 7. SQL关系
- 8. 与SQLite的SQL中的关系部门
- 9. SQL关系错误
- 10. SQL Azure表关系
- 11. SQL外键关系
- 12. SQL Server列关系
- 13. linq与sql关系
- 14. SQL关系查询
- 15. 表关系,SQL 2005
- 16. MongoDB关系vs SQL
- 17. SQL Server表关系
- 18. 表之间的SQL关系
- 19. 多对多的SQL关系
- 20. SQL订货1的关系
- 21. SQL SELECT与m:n的关系
- 22. 的Sql查询,组关系
- 23. LINQ to SQL中的表关系
- 24. SQL中的父级子记录关系?
- 25. T-SQL中的主/从关系
- 26. 访问中显示的SQL Server关系
- 27. Oracle SQL Sata Modeler中的弧关系(XOR)?
- 28. 建模SQL中的Post和Flag关系
- 29. SQL Server中的数据库表关系
- 30. SQL查询表中的许多关系
1到0或1的关系呢? – 2009-08-07 16:27:46