在SQLite DB中存储行的详细信息

时间:2017-02-03 21:49:42

标签: database sqlite

我想知道如何在SQLite DB中有效地存储行的详细信息。 例如:

主表:
ID | NAME | CITY
1 |彼得|巴黎
2 |莎拉|纽约
3 |赛斯|芝加哥

我想在数据库中存储有关某个人的详细信息,但我不知道该怎么做。问题是数据可以在程序代码中表示为数组,但我不能在数据库中执行此操作。我虽然是这个:

表“person_1”:(用于存储城市中最喜欢的地方的表)
NAME |地址
艾菲尔铁塔| Champ de Mars,5 Avenue Anatole
卢浮宫博物馆MuséeduLouvre,75058 Paris

表“person_2”:(同一目的)
NAME |地址
世贸中心一号|富尔顿街285号 自由女神像|自由岛

与其他人一样......

这是正确的做法还是我可以更有效率地做到这一点?

2 个答案:

答案 0 :(得分:2)

存储人们喜欢的主表:

id | name  | address
1  | Peter | Paris
2  | Sarah | New York

喜欢的地方的Favorite_Place表;

id | name            | address
1  | Eiffel Tower    | Champ de Mars, 5 Avenue Anatole
2  | Musee du Louvre | Musée du Louvre, 75058 Paris

和中间表类似;

person_id | place_id
1         | 1
1         | 2
2         | 1
2         | 2

如果您设计类似的表格,则不能在favorite_place表格中一次又一次地存储喜欢的地点。

答案 1 :(得分:1)

这可以通过2个表来解决:

表人:

id | name  | city
 1 | Peter | Paris
 2 | Sarah | New York

表最喜欢的地方:

id | person_id | name                   | address
1  | 1         | Eiffel Tower           | Champ de Mars, 5 Avenue Anatole
2  | 1         | Musee du Louvre        | Musée du Louvre, 75058 Paris
3  | 2         | One World Trade Center | 285 Fulton Street

通过这种方式,您可以轻松选择属于每个人的所有喜欢的地方。

您甚至可以编写查询来加入两个表:

SELECT p.name, f.name, f.address
FROM people    AS p
JOIN favorites AS f ON p.id = f.person_id

你会得到:

Peter | Eiffel Tower           | Champ de Mars, 5 Avenue Anatole
Peter | Musee du Louvre        | Musée du Louvre, 75058 Paris
Sarah | One World Trade Center | 285 Fulton Street