1

我有一个profile记录列表,每个记录如下所示:

{
  "name": "Peter Pan",
  "contacts": [
    {
      "key": "mobile",
      "value": "1234-5678"
    }
  ],
  "addresses": [
    {
      "key": "postal",
      "value": "2356 W. Manchester Ave.\nSomewhere District\nA Country"
    },
    {
      "key": "po",
      "value": "PO Box 1234"
    }
  ],
  "emails": [
    {
      "key": "work",
      "value": "abc@work.com"
    },
    {
      "key": "personal",
      "value": "abc@personal.com"
    }
  ],
  "url": "http://www.example.com/"
}

我会考虑具有以下架构结构:

  1. profile带有idname字段的表。
  2. profile_contact带有id, profile_id, key,value字段的表。
  3. profile_address带有id, profile_id, key,value字段的表。
  4. profile_email带有id, profile_id, key,value字段的表。

但是,我认为我为这样一个简单的 JSON 创建了太多表!

  1. 当我在表中搜索时是否会出现性能问题,因为执行了许多 JOINS 来检索一条记录?
  2. 将上述 JSON 记录建模到数据库中的更好方法是什么?在 SQL 中,还是在 NoSQL 中更好?
4

2 回答 2

0

这有点取决于。如果您计划每个用户拥有“无限”数量的联系人/地址/电子邮件,那么您的想法是一个不错的选择。

您还可以考虑(类似)以下内容:

PROFILE表,包含:

  • PROFILE_ID
  • NAME
  • EMAIL_ADDRESS_WORK
  • EMAIL_ADDRESS_PERSONAL
  • PHONE_NUMBER
  • MOBILE_NUMBER

ADDRESS表,包含:

  • ADDRESS_ID
  • PROFILE_ID
  • STREET
  • CITY
  • ..ETC

这意味着您可以为每个用户设置 2 种电子邮件和 2 种电话号码,并将它们与配置文件本身一起存储。

或者,您可以选择有一个单独的CONTACT表,其中包含电话号码和电子邮件地址(可能还有其他类型):

  • CONTACT_TYPE(电话、手机、email_work、email_personal)
  • CONTACT_VALUE
  • PROFILE_ID

这三个(我的和你的)都可以完美地工作。为了更好地决定什么对你有用,你应该写下所有存在(并且可能存在)的可能性。也许您希望能够为每个个人资料添加 10 个电子邮件地址(然后将它们与个人资料一起存储会很愚蠢),也许您在不同的联系人类型中会有很大的变化,例如 IM、facebook、ICQ、twitter(然后CONTACTS 表非常适合)。

因此,请尝试找出/列出您将拥有的数据类型,并查看它们如何适合特定模型,然后选择最合适的一个 :)

于 2013-01-07T09:28:59.180 回答
-1

这是数据库设计中最常见的情况...您应该停止将其作为新事物线程化,因为您包含了 json :-)

只需创建

用户:身份证,姓名

联系人:user-id、id、key、value

电子邮件和地址以及其他类似联系人的信息。

现在你只需要从 user 中选择并内部加入 user.id=id 上的其他表

于 2013-06-10T03:04:56.113 回答