如何在 MySQL 中实现 schema.prisma @reference(fields:...)?

Posted

技术标签:

【中文标题】如何在 MySQL 中实现 schema.prisma @reference(fields:...)?【英文标题】:How to implement the schema.prisma @reference(fields:...) in MySQL? 【发布时间】:2020-11-15 22:16:30 【问题描述】:

在下面的 schema.prisma 中,模型链接和用户之间的关系是用postedBy User? @relation(fields: [postedById], reference: [id]) 创建的。如何在 mysql 中实现这一点? 类型为 User 的字段 postedBy 应通过 User.id 字段链接到 User。由于 Link.postedBy 和 User.id 属于不同的数据类型,因此 Link.postedById 字段链接到 User.id。现在,postedBy 需要连接到 postedById。 我试图用 Link 中的两个 FOREIGN KEY 来解决这个问题。第一个链接postedBy 和postedById,第二个链接postedById 和User.id。这不起作用。 非常感谢任何帮助。

model Link 
  id          Int      @id @default(autoincrement())
  createdAt   DateTime @default(now())
  description String
  url         String
  postedBy    User?   @relation(fields: [postedById], references: [id])
  postedById  Int?


model User 
  id          Int     @id @default(autoincrement())
  name        String
  email       String  @unique
  password    String  
  links       Link[]

这些是我为获取架构结构而创建的 MySQL 查询:

CREATE TABLE User (
  id        INT AUTO_INCREMENT PRIMARY KEY,
  name      VARCHAR(128),
  email     VARCHAR(128) UNIQUE,
  password  VARCHAR(128),
  links     VARCHAR(256),
  CONSTRAINT Link FOREIGN KEY (id) REFERENCES Link(id)
);

CREATE TABLE Link (
  id          INT AUTO_INCREMENT PRIMARY KEY,
  createdAt   DATETIME DEFAULT CURRENT_TIMESTAMP(),
  description VARCHAR(256),
  url         VARCHAR(256),
  postedBy    VARCHAR(128),
  postedById  INT,
  CONSTRAINT author FOREIGN KEY (postedBy) REFERENCES Link(postedById), 
  FOREIGN KEY (postedById) REFERENCES UserId
);

【问题讨论】:

【参考方案1】:

编辑:

CREATE TABLE User (
  id        INT AUTO_INCREMENT PRIMARY KEY,
  name      VARCHAR(128),
  email     VARCHAR(128) UNIQUE,
  password  VARCHAR(128)
);

CREATE TABLE Link (
  id          INT AUTO_INCREMENT PRIMARY KEY,
  createdAt   DATETIME DEFAULT CURRENT_TIMESTAMP(),
  description VARCHAR(256),
  url         VARCHAR(256),
  postedById  INT not null,
  FOREIGN KEY (postedById) REFERENCES User(id)
);

这应该可以工作

【讨论】:

也许我不清楚。我想知道如何根据架构创建 MySQL 查询。我修改了我创建的查询。他们抛出错误:错误 3780 (HY000):在外键约束“作者”中引用列“postedBy”和引用列“postedById”不兼容。

以上是关于如何在 MySQL 中实现 schema.prisma @reference(fields:...)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MySQL 中实现 schema.prisma @reference(fields:...)?

如何在 MySQL 5 .7 中实现 CTE 功能?

如何使用 Java Spring 在 MySql 中实现多租户 [关闭]

如何使用 Laravel 5.6 在 Laravel Eloquent 中实现嵌套 MySQL 查询

如何在 jOOQ for MySQL 8 中实现 JSON_SET()

如何在MySQL中实现自增序列?简单易懂的教程推荐!