避免这些表冗余的最佳方法是什么

What is the best way to avoid redundancy with these tables

我正在尝试使用计划 table 创建数据库。| 这些计划是:基本、快速、高级和专业 他们每个人都有一个价格标签和支持计划,如 PHP、ASP 和 SSL 支持。

        Basic:      Express
price - 69,00       89,00    
setup - 0,00         0,00
SSL -    X           Yes
PHP -    X           Yes
ASP -    X            X

我怎样才能在不造成冗余的情况下制作 ERD。

我考虑过 table 像:

    Table Plans:
    ID     Pname     Pprice     Psetup     Pasp     Pphp     Pssl
    0      Basic     69,00      0,00       0        0        0
    1      Express   89,00      0,00       0        1        1
    etc.. 

计划将扩展更多类型。但最终这会使 table 太大,所以我考虑创建另一个 table.

    Table Plans:
    ID     Pname     Pprice     Psetup     Plansbool
    0      Basic     69,00      0,00       0
    1      Express   89,00      0,00       1


    Table Plansbool:
    ID     Bname     YesNo      PlansID
    0      Php       0          0
    1      Php       1          1
    2      Asp       0          0
    3      Asp       0          1
    4      Ssl       0          0 
    5      Ssl       1          1

但这也造成了问题,在table"plans"中,计划只能接受Plansbooltable中的一种类型。我也认为这是多余的现在我看不到创建具有相应类型支持的非冗余计划的大局 table..

如果这真的很容易解决或令人困惑,我很抱歉。

在你的想法中如何解决这个问题并不是多余的。 当您能够使用两种不同的方式找到相同的数据时,就会创建冗余。

我对 "plans" 是什么感到困惑。计划是 Basic、Express 等,还是计划 PHP、ASP...?

我认为你的意思是 PHP、ASP 等等都是类型(因为在第一句话中你称它们为两个计划(Basic、Express、...和 ​​PHP, ASP, ...)

但是做一个 table 计划(Basic,Express,...)等等,另一个 table 类型(PHP,ASP , ...)

比建立多对多连接并使用属性 "Price" 和 "Stetup" 解析它。

以及列:

Plan (PlanID, Name)
PlanType (PlanID, TypeID, Price, Setup)
Type (TypeID, Name)

当有类型的计划时,只需添加一个 "PlanType":-)