【问题标题】:Best structure for this database?该数据库的最佳结构?
【发布时间】:2014-01-02 16:12:39
【问题描述】:

问题:我想设计一个网站,我需要一个数据库,但是我不知道哪种结构更好!

会发生什么:用户会将一些 URI 添加到他们的收藏夹中。

可能的结构

结构一

TABLE "USERS":
=====================================================================
id | name | last_name | urls
1  | John | Smith     | [google.com,stackoverflow.com,yahoo.com,...]
=====================================================================

结构二

TABLE "USERS":
=============================================
id | name | last_name 
1  | John | Smith
2  | Joe  | Roth
==============================================

TABLE "URLS":
==============================================
id | user_id | url
1  | 1       | google.com
2  | 1       | stackoverflow.com
3  | 2       | ask.com
4  | 1       | yahoo.com
5  | 2       | being.com
==============================================

哪种结构最好?提前致谢!

【问题讨论】:

标签: database database-design data-structures database-schema


【解决方案1】:

第二个模式(在 URLS.user_id 上有一个外键约束)将更容易管理。 select 查询将需要使用 join 并且您将执行更多 inserts,但您不需要执行字符串解析来确定 url 是什么(使用第一个模式,您将需要每个 selectupdate)。

在我目前的工作中,production 数据库中的一个表具有类似于第一种情况的架构,当我的整个部门不得不编写使用它的代码时,这让我整个部门都感到畏缩和抱怨。然而这张桌子仍然存在,因为修复它将是一次大规模的检修。 (该表是由一位不再在这里工作的经理创建的。)如果您现在正在创建您的架构,请正确这样做,而您仍然可以。

【讨论】:

    【解决方案2】:

    绝对创建另一个保存urls + user_id的表。你的第一个类型不在Normal form

    【讨论】:

    • 具体来说,它不是first范式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    相关资源
    最近更新 更多