【问题标题】:MySQL Database Design: one to one,many to many, many to one, or too many?MySQL 数据库设计:一对一、多对多、多对一还是太多?
【发布时间】:2011-10-16 07:43:46
【问题描述】:

我正在为我的第一个项目在我的数据库中设置表。 (令人兴奋!)

我很难决定需要建立哪些类型的关系。

我计划了以下基本表格。

products
-----
id
product_name
product_details
product_url
product_img
category_id
business_id


categories
-----
id
category_name
category_description
category_slug


businesses
----------------
id
business_name
business_phone
business_address
business_city
state_id
business_zip

state
-----
id
state_name

我陷入困境的是决定建立什么样的关系。

每个product只能属于1个category,并且只能属于1个business

至于 business 表,我想知道将 cityzip-code 分成单独的表是否更好。

我希望能够按 categorycity 检索 products , 例如:“los angeles”中的“shoes”,或者只是“shoes”或“los angeles”中的所有产品

谁能提供一些见解或分享他们的经验。由于我正准备设置我的表,所以我宁愿现在解决这些场景,然后在开发过程中进行。

【问题讨论】:

    标签: mysql database database-design table-relationships


    【解决方案1】:

    您的设计还可以 - 很干净。我在任何地方都看不到多对多 - 它似乎是一个直接的层次结构。

    此外,你的思维过程似乎很清晰 - 不断问自己这些问题,你会没事的。

    不过,我有以下建议:

    首先,请始终以单数形式命名您的表,business 而不是 businesses

    其次,尽量避免将表名作为列名的前缀,所以name,而不是business_name - 当您在查询中引用它时,无论如何都很明显:business.name(@987654327 中的额外business_ @ 是多余的)

    另外,因为 zip 是在一个城市,而 city 是在一个州,所以在业务上存储 city 和 state 是多余的数据,所以你可能应该这样做:

    business
    ----------------
    id
    name
    phone
    address
    zip_code_id
    
    zip_code
    --------
    id
    city_id
    name
    
    city
    ----
    id
    state_id
    name
    
    state
    -----
    id
    name
    

    要回答您的疑问,您可以使用此架构获得所需的内容。除非你真的有麻烦,否则我不会在这里发布,但它们是非常简单的查询,所以我会留给你解决。

    【讨论】:

    • 感谢您的帮助和建议,特别是关于不为列名添加前缀的部分,它更整洁。再次感谢。
    【解决方案2】:

    你应该权衡利弊。

    对于多对多关系,如果进行规范化,最终会得到更多表,并且需要更多连接。如果您必须非常定期地检索这些记录,则连接将非常昂贵并且会增加大量开销。

    如果您决定将内容放入一张大表中,那么您将增加数据冗余,这会浪费存储空间,但如果始终查询列组合,因为索引使用更好且没有连接,则值得。然而,它增加了应用程序开发的复杂性。当您由于非规范化而在不同的表中具有相同的列并且最终不得不记住更新两个表时尤其如此,如果您忘记更新任何一个表,这会增加数据不一致的风险。

    总结

    所以这真的取决于您的情况,如果性能是关键,并且您不介意增加的复杂性和可能的​​数据完整性问题,那么请采用非规范化方法。

    如果性能不是一个大问题(行数不多,用户数不多,硬件足够多,速度无关紧要),那么分离关系表将减少存储空间(这些天毫无意义,因为它如此便宜),提高数据完整性,减少数据不一致并降低开发复杂度

    【讨论】:

    • 感谢您的回复。我现在不需要复杂性,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多