gpt4 book ai didi

sql - sql中多对多关系的外键

转载 作者:搜寻专家 更新时间:2023-10-30 22:05:46 25 4
gpt4 key购买 nike

我有一个名为 Listing 的 SQL 表,它表示已出租的房屋。该表有一个主键 id 和另一个名为 amenities 的字段,其中包含每个房子必须提供的东西。每栋房子的设施用逗号隔开。例如 电视、互联网、浴室

我使用以下命令创建了一个名为 Amenity 的表,其中包含所提供的所有独特的不同设施以及每个设施的 SERIAL 编号。

CREATE TABLE Amenity AS(
SELECT DISTINCT regexp_split_to_table(amenities,',') FROM Listing
);

ALTER TABLE Amenity
RENAME regexp_split_to_table to amenity_name;

ALTER TABLE Amenity ADD COLUMN amenity_id SERIAL;
ALTER TABLE Amenity ADD PRIMARY KEY(amenity_id);

我的问题是我需要用外键连接这两个表,但我不知道如何连接它们,因为它们之间的关系是多对多关系。我已经检查了关于多对多关系中外键的其他问题,但找不到任何类似的问题。如果存在类似的东西,请解释它与我的问题相似的方式。

最佳答案

您必须创建另一个表来保存房屋与其便利设施之间的一对多关系。

所以你的 3 个表看起来像这样:

Table HOUSE
+----------+------------+
| house_id | house_name |
+----------+------------+
| 1 | Uncle Bob |
+----------+------------+
| 2 | Mom Sara |
+----------+------------+

Table AMENITIES
+------------+--------------+
| amenity_id | amenity_name |
+------------+--------------+
| 1 | TV |
+------------+--------------+
| 2 | Internet |
+------------+--------------+
| 3 | Kitchen |
+------------+--------------+

Table HOUSE_AMENITIES
+----------+------------+
| house_id | amenity_id |
+----------+------------+
| 1 | 1 |
+----------+------------+
| 2 | 1 |
+----------+------------+
| 2 | 2 |
+----------+------------+
| 2 | 3 |
+----------+------------+

所以 Uncle Bob 的房子只有电视,而 Mom Sara 的房子有电视、互联网和设备齐全的厨房。

请记住 - 永远不要使用同一列来存储多个值(以逗号分隔)。在所有这些情况下,您必须使用另一个表,将多个逗号分隔值转换为该详细表内的不同行并引用主表的主键。

关于sql - sql中多对多关系的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55499797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com