sha*_*non 5 database-design sql-server subtypes
我想在 SQL Server 中实现类或表继承(Account、CatAccountDetails、DogAccountDetails)。
我找到了对 MySQL 的推荐:
基本上,它是:
添加一个被限制为单个值的类型列(例如 CatAccountDetails 中的“C”列)感觉有点笨拙,所以我想知道SQL Server 中是否有一个功能可以启用这种情况?
另外,如果这是这样做的方法,我是否应该另外定义一些东西来防止这个“未使用”的列在我的 ORM(实体框架)请求表连接时降低性能,比如只在 PK 上创建一个额外的外键?
主要问题是CatAccountDetails将有不同的列DogAccountDetails。在我的应用程序中,猫与狗相比具有不同且更多的属性。旁注,“猫”和“狗”代表我当前场景中的三类网站成员。
最终,我根据评论实现了 ypercube 的建议:
“类型”列可以定义为 SQL-Server 中的计算(但常量)列。我认为它必须如此,
PERSISTED这样它才能参与外键约束。
这对于性能和与我的工具的兼容性(实体框架 <= 6.0)都很有效:
CREATE TABLE [dbo].[Account](
[Id] [int] IDENTITY(1000,1) NOT NULL PRIMARY KEY CLUSTERED,
[CommunityRole] [int] NOT NULL,
[FirstName] [nvarchar](50) NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
CONSTRAINT [UX_Derived_Relation] UNIQUE ([Id], [CommunityRole]))
CREATE TABLE [dbo].[Recruiter](
[Id] [int] NOT NULL PRIMARY KEY CLUSTERED,
[CommunityRole] AS ((1)) PERSISTED NOT NULL,
[RecruiterSpecificValue] [int] NOT NULL,
FOREIGN KEY ([Id], [CommunityRole]) REFERENCES Account([Id], [CommunityRole]))
CREATE TABLE [dbo].[Candidate](
[Id] [int] NOT NULL PRIMARY KEY CLUSTERED,
[CommunityRole] AS ((2)) PERSISTED NOT NULL,
[CandidateSpecificValue] [int] NOT NULL,
FOREIGN KEY ([Id], [CommunityRole]) REFERENCES Account([Id], [CommunityRole]))
Run Code Online (Sandbox Code Playgroud)
这很好地映射到我在求职板上实施多个离散帐户类型(招聘人员和候选人)。
| 归档时间: |
|
| 查看次数: |
4397 次 |
| 最近记录: |