SQL 和表之间的关系

标签 sql postgresql

好几次我都在回到对数据库关系理论的理解上,但仍然没有成功。我会再试一次。

假设我有两个表: 动物:

CREATE TABLE animals (id INTEGER PRIMARY KEY, name TEXT);

和食物:

CREATE TABLE food (id INTEGER PRIMARY KEY, food TEXT);

我需要的是将这两个表连接起来。例如,我想从 animals 表中选择“ pig ”,并从 food 表中获取 pig 可以吃的所有东西。 我只是不知道如何将它们联系起来。我相信我可以向 food 表添加一个外键,它将链接到 animal 表的主键,但有一个问题我无法弄清楚:

如果我从网络表单等输入数据库,输入动物名称和它吃的产品,会怎样?动物名称进入第一个表并自动接收一个 id。它只是自动递增。所以,为了使它成为第二个表的关系,我必须从第一个表中选择新的 ID!所以我们得到了三个 sql 请求:

1) INSERT INTO animals (name) VALUES ('pig);

2) SELECT id FROM animals WHERE name='pig';(我们将它存储在一个变量中,现在并不重要)

3) INSERT INTO food (product, animal_id) VALUES ('something', 'id of a pig');

我只是觉得不对。 或者我的大脑无法理解如此复杂的抽象概念。

请指教。

最佳答案

您需要一个连接表,它与AnimalsFood 相关。这看起来像:

CREATE TABLE AnimalFoods (
    id INTEGER PRIMARY KEY,
    AnimalId int references Animal(id),
    FoodId int references Food(id)
);

然后您可以使用这些表之间的各种连接来回答您的问题。

关于SQL 和表之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31514744/

相关文章:

postgresql - 错误 : more than one row returned by subquery

node.js - 使用 postgres 和 sequelize-mock 进行单元测试模拟

php - MYSQL/SQL中以下场景如何查询过滤结果?

sql - 查询中的可选连接(...如果主表字段为空,则忽略连接)

sql - 今天最新和昨天最新记录

mysql - 您将如何创建服装尺码数据库结构?

PostgreSQL 9.2 : apply operation to every array member

postgresql - 如果在连接语句中不使用主表/键有任何缺点

postgresql - Sequelize.js - 如何在没有原始 SQL 的情况下创建重要的关联?

SQL 选择 : how to return count of consecutive values from an ordered data set