我在Linq对象关系(O / R)映射器中的两个表之间添加一条线:
Order Customer
-------------- ---------------
| OrderID | | CustomerID |
| CustomerID |♦---------˃| ... |
| | | |
-------------- ---------------
注意:或者也许是
Order Customer
-------------- ---------------
| OrderID | | CustomerID |
| CustomerID |˂---------♦| ... |
| ... | | |
-------------- ---------------
我不确定;它让我可以双向拖动。
假设第二张图,Association
的基数创建为OneToMany
。这是有道理的,因为:
但令我困惑的是Association.Unique
(布尔)属性。它默认为false
。这是有道理的,因为它是 OneToMany 关联。 Order.CustomerID
不能是唯一的,否则它不会是 OneToMany 关联,它会是 OneToOne 。
但是我可以将 OneToMany Unique属性更改为 true 。这没有任何意义,因此我得出结论,Unique
ness不适用于Order.CustomerID
,而是适用于Customer.CustomerID
。但该图表已显示Customer.CustomerID
是主键。当然它是独一无二的,它是主键。
但未设置Unique
属性。这没有任何意义,所以我得出结论,Unique
ness并不意味着任何一个表。
第二个问题,Unique
是什么意思?
指定外部目标列是否具有唯一性约束
第三个问题:什么是父和孩子?
再次假设第二张图:
Customers.CustomerID ♦------------> Orders.CustomerID
我把Customers
表作为父母。这是拥有客户意味着什么的人。你想改变一个关于顾客的东西,你走向父母。
同时,子Orders
表出现并希望引用Customer
。
Parent(diamond) Child(arrowhead)
==================== =================
Customers.CustomerID (PK) ♦------------> Orders.CustomerID (FK)
当我查看协会的父和儿童属性时:
儿童财产
Name
:Orders
家长属性
Name
:Customer
他们想要在名为Orders
的“child”上创建一个属性。不不不。孩子是订单。他们想要向父母添加一个名为Customer
的属性。不不不。父是客户。
这意味着我必须倒退,而 parent 和 child 这两个词与我的想法完全相反:
Child(diamond) Parent(arrowhead)
==================== =================
Customers.CustomerID (PK) ♦------------> Orders.CustomerID (FK)
到这个时候我想把我的脑筋吹掉;而是花了35分钟在Stackoverflow上创作一个问题;而不是继续在我的电脑上尖叫。
帮助。
答案 0 :(得分:0)
关于问题2 - Unique属性可能表示该关系是OneToOne关系。
即使直接在sql数据库中也没有特定的OneToOne关系。而是只有一个外键,其中一个表中的键可以导出到另一个表。因此,这种外键关系总是一对一的。在包含导出密钥的表上使用其他约束,可以事实上一对一地建立关系。但这样做并不会改变外键关系,而只是对外键表中的数据应用其他条件。
关于问题3:属性名称意味着子对象(Order)将具有名为Customer的属性,该属性可用于获取父对象的实例。父对象将有一个名为Orders的属性,可用于为客户提取子级。