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

时间:2018-02-22 12:48:18

标签: database-normalization

我正在尝试使用计划表创建一个数据库 计划包括:基本,快速,高级和专业 他们每个人都有一个pricetag和支持计划,如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 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 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

但这也造成了问题,即在“计划”表中,计划只能接受Plansbool表中的一种类型。我也认为这是多余的,现在我看不到大局使用相应的支持类型创建非冗余计划表。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

但是制作一个包含计划的表(Basic,Express,...)等等,以及另一个包含类型的表(PHP,ASP,...)

比制作多对多 - 连接并且只需使用attribut" Price"和" Stetup"。 enter image description here

列:

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

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