我有一个名为Listing
的SQL表,它代表已租用的房屋。该表有一个主键id
和另一个名为amenities
的字段,每个房子都提供的东西。每个房子的设施都用逗号分隔。例如TV, Internet, Bathroom
。
我使用以下命令创建了一个名为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);
我的问题是我需要用外键连接这两个表,我不知道它们之间的关系是多少关系。我已经检查了很多关系中有关外键的其他问题,但找不到类似的东西。如果存在类似的东西,请解释它与我的问题类似的方式。
你必须创建另一个表,它将保持房屋与其设施之间的one-to-many
关系。
所以你的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 |
+----------+------------+
所以房子叔叔鲍勃只有电视,而房子妈妈萨拉有电视,互联网和一个设备齐全的厨房。
请记住 - 您不应该使用相同的列来存储多个值(用逗号分隔)。在所有这些情况下,您必须使用另一个表,将多个逗号分隔值转换为此详细信息表中的不同行,并引用主表的主键。