![]() |
1
2
我不确定Linq to SQL的含义,但是解决这个问题的一个模型是使用多个 Junction Tables . 在您的示例中,您将拥有一个名为AddressUsers的表,该表有两列:AddressID和UserID,以及一个名为AddressCompanies的表,该表具有AddressID和CompanyID列。 |
![]() |
2
1
多对多: 地址表,具有唯一的合成ID(例如,自动增量)。 用户地址表,具有唯一的合成ID(例如,自动增量)、用户ID外键和地址外键。 公司地址表,具有唯一的合成ID(例如,自动增量)、公司ID外键和地址外键。 (请注意,如果用户(或公司)可以 只有 在一个地址中,用户表(或公司表)中只有一个地址\id外键。这不是您的用例。) |
![]() |
3
1
你所拥有的是一种多态性关联。我不熟悉linqtosql,但是如果它支持这种关系的引用完整性,那么不要害怕,做任何映射。 在标准实践中,多态关联通常可以通过逆转来克服。您应该为用户和公司分别使用一个交叉点(连接)表来连接到地址。这类似于多对多关系,其中交叉表中的每一行引用一个用户和一个地址。 如果使用交叉表,为了避免多对多(但保持一对多),请对交叉表中的地址键施加唯一约束。 如果有ORM问题,请使用与useraddress和companyaddress联接的父地址表。 |
![]() |
4
1
我建议遵循TPDI的建议,但在用户/公司和地址之间使用一对多的关系;至少这样,您的所有关键数据类型都是相同的。 添加我的答案的主要原因是为了响应您存储ObjectId和ObjectType的第二个建议—属性拆分是一个坏主意,请避免! 请阅读此Celko文章: http://www.tdan.com/view-featured-columns/9852 |
![]() |
Community wiki · SQL语法新手 1 年前 |
![]() |
KateMak · 是否将多行中的多列与唯一id组合? 1 年前 |
![]() |
Karuna · SQL中列内的筛选器[重复] 1 年前 |
![]() |
Irvan Affandy · 为另一个选择选择声明的键 1 年前 |
![]() |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
![]() |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |