【问题标题】:Mysql tables with duplicate attributes具有重复属性的Mysql表
【发布时间】:2011-08-19 00:30:48
【问题描述】:

我正在设计一个包含多项功能的简单经销商网站。用户可以登录并为汽车发帖。

帖子可以是新车/二手车:

`new_posts` database has the following fields
- id
- title
- price_from
- price_to
- date_submitted

`used_posts` database has the following
- id
- title
- price_from
- price_to
- year_from
- year_to
- date_submitted

注意属性是如何重复的。我经常遇到这样的问题,想知道解决这个问题的最佳方法是什么。我对数据库规范化有一般的了解,但我可以使用我能获得的任何帮助。

谢谢

【问题讨论】:

    标签: mysql normalization rdbms


    【解决方案1】:

    这样的事情怎么样?

    posts
    - id
    - title
    - price_from
    - price_to
    - year_from (nullable)
    - year_to (nullable)
    - date_submitted
    - is_used (yes/no)
    

    【讨论】:

    • 我曾考虑过使用它,但我担心的是,如果将来差异变大,这仍然是最好的方法吗?例如。如果我仅将字段 images 添加到 used_posts。
    • 听说过 YAGNI 吗?你不会需要它的。你说的未来有多少?可以只为图像表设置可为空的外键吗?新车的图片难道不值得吗?您可以只为 new/used 而不是 Boolean 设置一个类型列。只是一个枚举。从长远来看,这将有更好的表现。可以为空的数据是可以接受的,您的差异只有 2 列!做最简单的事情,不要预先设计太多。考虑到一些很有可能发生的未来方向......
    • 是的,你是对的(YAGIN 不错!)。我认为这是我需要走的路,因为另一种方法带有学习曲线。谢谢!
    【解决方案2】:

    有很多选择,但有两个核心思想:

    1. 将表格合并为一个,并将二手车字段设为可选
    2. 提取构成vehicle 的字段,这就是您的基表。然后您可以创建其他表 - truckvanSUVnewused - 包含字段。然后,您需要 bridge 表将它们连接回您的基本 vehicle 表。

    第一个选项易于实施,但难以扩展。第二个更复杂,但更容易扩展。

    就我个人而言,我会合并这两个表。它可能不会给任何 DBA 留下深刻印象,但从应用程序的角度来看它是实用的。

    【讨论】:

    • 这是我想到的解决方案,因为我需要它来扩展,但基本上你所说的是取出所有“车辆”通用的所有字段并将它们放入一个数据库中。然后使用其他表消除所有差异,您可以稍后将其加入主表?
    • 您应该查找对象关系不匹配,并专门查找基于映射继承的结构。这个想法类似于 Jason 在第 2 步中的建议。
    猜你喜欢
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 2014-12-07
    • 2016-02-05
    • 2014-05-23
    • 2018-11-03
    相关资源
    最近更新 更多