SQL 嵌入文档等效
SQL embedded document equivalent
我在只使用 mongodb 之后就开始使用 SQL。因此,我无法将一些实践映射到 SQL 世界。首先,我不确定 mongodb 中的嵌入文档如何映射到 SQL。
例如,在 mongodb 中,如果我想为一个有车的人建模,我将有一个看起来像
的文档集合
{
firstName: 'John',
lastName: 'Smith',
car: {
color: 'Red',
year: 2001,
...
}
}
如何在 SQL 数据库中创建类似的关系?我意识到我可以为 car_color
和 car_year
之类的东西命名空间,但与在文档结构中显示这种关系相比,这在概念上似乎无效。
按照上面的示例,您可以将它们分成两个 tables(关系),例如 Person
和 Car
,并使用所注明的字段。每个 table 也将有一个主键(可以是自然的,例如汽车登记号,也可以是人工的,如自动递增整数)。
要关联这两个实体,您可以 (1) Person
中的外键字段具有 Car
中主键的值,或 (2) 外键字段Car
中的值与table中的主键值相同Person
中的值。我更喜欢 (2),因为它允许 1 人拥有多辆车。
当然,这是一种简化 - 人们可能拥有多辆汽车并且一辆车可能由多人拥有。这通常是通过将外键保留在汽车和人 table 之外并创建第三个 table 来建模的,它只存储一对与汽车和人相关的外键。
脚注:大多数人是从 SQL 到 MongoDB,而不是相反!祝你好运!
我在只使用 mongodb 之后就开始使用 SQL。因此,我无法将一些实践映射到 SQL 世界。首先,我不确定 mongodb 中的嵌入文档如何映射到 SQL。
例如,在 mongodb 中,如果我想为一个有车的人建模,我将有一个看起来像
的文档集合{
firstName: 'John',
lastName: 'Smith',
car: {
color: 'Red',
year: 2001,
...
}
}
如何在 SQL 数据库中创建类似的关系?我意识到我可以为 car_color
和 car_year
之类的东西命名空间,但与在文档结构中显示这种关系相比,这在概念上似乎无效。
按照上面的示例,您可以将它们分成两个 tables(关系),例如 Person
和 Car
,并使用所注明的字段。每个 table 也将有一个主键(可以是自然的,例如汽车登记号,也可以是人工的,如自动递增整数)。
要关联这两个实体,您可以 (1) Person
中的外键字段具有 Car
中主键的值,或 (2) 外键字段Car
中的值与table中的主键值相同Person
中的值。我更喜欢 (2),因为它允许 1 人拥有多辆车。
当然,这是一种简化 - 人们可能拥有多辆汽车并且一辆车可能由多人拥有。这通常是通过将外键保留在汽车和人 table 之外并创建第三个 table 来建模的,它只存储一对与汽车和人相关的外键。
脚注:大多数人是从 SQL 到 MongoDB,而不是相反!祝你好运!