sql - 将 "Arnold Schwarzenegger"和 "Hasta la vista baby"插入到这两个空 SQL 表中,我的 SQL 语句是什么?

标签 sql sql-server insert identity-column bidirectional-relation

如果将“Arnold Schwarzenegger”和“Hasta la vista baby”插入到以下空 SQL 表中,我的语句是什么?

这个问题的标题本来是“如何将第一条记录插入到具有双向关联和自动生成整数PK的SQL表中?”但我不确定我的措辞是否正确...基本上,我有两个表 ActorsCatchPhrases

Actor 看起来像:

  ActorId                  int             NOT NULL  PK (autogenerated by db)
  FavoriteCatchPhraseId    int             NOT NULL  FK
  Name                     varchar(200)    NOT NULL

CatchPhrases 看起来像:

  CatchPhraseId            int             NOT NULL  PK (autogenerated by db)
  ActorId                  int             NOT NULL  FK
  PhraseText               varchar(500)    NOT NULL

因此,Actor 可以有多个流行语,但必须至少有一个。流行语与 Actor 相关联。两个表中目前都没有数据。

最佳答案

我会以不同的方式建模以避免双向关系(这很难做到)。只需将一列 (IsFavorite) 添加到 CatchPhrases 表。在代码中使用约束或业务规则将每个 Actor 标记为最喜欢的流行语的数量限制为一个。

Actor :

ActorId                  int             NOT NULL  PK (autogenerated by db)
Name                     varchar(200)    NOT NULL

流行语:

CatchPhraseId            int             NOT NULL  PK (autogenerated by db)
ActorId                  int             NOT NULL  FK
PhraseText               varchar(500)    NOT NULL
IsFavorite               bit             NOT NULL

确保您在 CatchPhrases 表的 ActorId 上有一个索引,以便您可以快速找到 Actor 的流行语。

或者,使用连接表——这将允许多个参与者拥有相同的口号。

Actor :

ActorId                  int             NOT NULL PK (autogenerated by db)
Name                     varchar(200)    NOT NULL

ActorCatchPhrases

ActorId                  int             NOT NULL PK (FK to Actors)
CatchPhraseId            int             NOT NULL PK (FK to CatchPhrases)
IsFavorite               bit             NOT NULL

流行语

PhraseId                 int             NOT NULL PK (autogenerated by db)  
PhraseText               varchar(500)    NOT NULL

关于sql - 将 "Arnold Schwarzenegger"和 "Hasta la vista baby"插入到这两个空 SQL 表中,我的 SQL 语句是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5205473/

相关文章:

PHP神秘的额外数据库插入

javascript - 在插入 HTML 的 JavaScript 中打开窗口

sql - MS SQL 配置与 Slick 2.0.1 和 Playframework 2.2.2

sql-server - 使用 SQL Server Server Management Studio 导入/导出数据库

sql - PostgreSQL 8.3 中具有非空和唯一约束的增量字段

mysql - 有没有比通过 ID 更快的方法来查询数据库中的特定条目?

.net - 为什么函数在作为 SQL Server CLR UDF 执行时会输出不同的结果?

PHP/MYSQL - Insert into ignore,忽略指定列

php - 使用给定的变量名称将前三个结果保存在 while 循环中?

java - 有什么方法可以从数据库中批量而不是整体检索记录吗?