相关疑难解决方法(0)

外键可以为NULL和/或重复吗?

请为我澄清两件事:

  1. 外键可以为NULL吗?
  2. 外键可以重复吗?

据我所知,NULL不应该在外键中使用,但在我的某些应用程序中,我能够NULL在Oracle和SQL Server中输入,我不知道为什么.

sql sql-server oracle foreign-keys

287
推荐指数
5
解决办法
35万
查看次数

带有Entity Framework的SQL列默认值

我试图使用默认SQL值的Code-First EF6.

例如,我有一个"CreatedDate"列/属性不为null,SQL的默认值为"getdate()"

我如何在我的代码模型中表示这一点?目前我有:

<DatabaseGenerated(DatabaseGeneratedOption.Computed)>
Public Property CreatedDate As DateTime
Run Code Online (Sandbox Code Playgroud)

这是否有效,或者我是否需要使用可空的内容,即使实际列不应为null,因此EF在未设置时不发送值:

<DatabaseGenerated(DatabaseGeneratedOption.Computed)>
Public Property CreatedDate As DateTime?
Run Code Online (Sandbox Code Playgroud)

或者那里有更好的解决方案吗?

我不希望EF处理我的默认设置 - 我知道这对我来说是可用的,但在我目前的情况下是不可能的.

.net entity-framework entity-framework-6

14
推荐指数
2
解决办法
1万
查看次数

Oracle - 部分可为空的复合外键

我有一个旧的 Oracle 数据库,它有一个我想要理解的奇怪的怪癖。它有一个复合外键,其中一些列可以为空。对我来说,这听起来像是一个粗心的开发人员的糟糕设计,但我想征求意见。当然,原来的开发团队早已不复存在。

该表在列方面要大得多,但我认为我能够在下面的示例中提炼问题:

create table quadrant (
  region number(9) not null,
  area number(9) not null,
  caption varchar2(20),
  primary key (region, area)
);

insert into quadrant (region, area, caption) values (10, 123, 'Chicago');
insert into quadrant (region, area, caption) values (10, 125, 'Wisconsin');

create table farm (
  id number(9),
  region_id number(9) not null,
  area_id number(9),
  name varchar2(50),
  constraint fk_region_area foreign key (region_id, area_id)
    references quadrant (region, area)
);

insert into farm (id, region_id, area_id, name) values (5, 10, …
Run Code Online (Sandbox Code Playgroud)

sql oracle foreign-keys

5
推荐指数
2
解决办法
1029
查看次数

在现有表上创建外键失败,但未找到孤立记录

使用Firebird 2.1.

在重构大型系统时,我想在已经填充的表之间创建外键:

ALTER TABLE CMS_ARTRANS
ADD CONSTRAINT FK_ARTRANS_PRACTITIONER_ID
FOREIGN KEY (PRACTITIONER_ID)
REFERENCES CMS_SOLICITORS (RECID);
Run Code Online (Sandbox Code Playgroud)

这失败并显示以下消息:

违反FOREIGN KEY约束"".在表"CMS_SOLICITORS"上违反FOREIGN KEY约束"PK_CMS_SOLICITORS".外键引用目标不存在.

我有点期待参考完整性存在问题,这就是我首先想要FK的原因.所以我去寻找不匹配的记录:

SELECT
    *
FROM CMS_ARTRANS AR
LEFT OUTER JOIN CMS_SOLICITORS S
    ON (S.RECID = AR.PRACTITIONER_ID)
WHERE (AR.PRACTITIONER_ID IS NOT NULL) AND (S.RECID IS NULL)
Run Code Online (Sandbox Code Playgroud)

而且没有.CMS_ARTRANS.PRACTITIONER_ID中有大量NULL.但是没有与CMS_SOLICITOR记录不匹配的非NULL.

为什么Firebird不喜欢我的FK?

firebird

4
推荐指数
1
解决办法
2555
查看次数

使外键(字符串字段)可为空

我的模特是这样的

 public class Appointment
{
    public int AppointmentID { get; set; }
    public string AppointmentCode { get; set; }
    public string ApplicationUserId { get; set; }
    [ForeignKey("ApplicationUserId ")]
    public ApplicationUser ApplicationUser { get; set; }
    public int PriceId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我期待ApplicationUserId可以为空的外键,但它不是像桌面上那样创建的

  CONSTRAINT [FK_dbo.Appointment_dbo.IdentityUser_ApplicationUserId] FOREIGN KEY ([ApplicationUserId]) REFERENCES [dbo].[IdentityUser] ([Id]),
Run Code Online (Sandbox Code Playgroud)

有人能指出正确的方法来实现这一目标吗?

注意:我使用Entity框架代码的第一种方法

c# asp.net-mvc entity-framework ef-code-first

4
推荐指数
2
解决办法
3966
查看次数