我正在尝试使用计划表创建一个数据库 计划包括:基本,快速,高级和专业 他们每个人都有一个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表中的一种类型。我也认为这是多余的,现在我看不到大局使用相应的支持类型创建非冗余计划表。
如果这很容易解决或者令人困惑,我很抱歉。
答案 0 :(得分:0)
在您的想法中如何解决这个问题并非冗余。 当您能够使用两种不同的方式查找相同的数据时,将创建冗余。
我对什么"计划"感到困惑。是。是计划Basic,Express等,还是计划PHP,ASP ......?
我认为你的意思是PHP,ASP等类型(因为在第一句话中你称它们为计划(Basic,Express,...和PHP,ASP,......)
但是制作一个包含计划的表(Basic,Express,...)等等,以及另一个包含类型的表(PHP,ASP,...)
比制作多对多 - 连接并且只需使用attribut" Price"和" Stetup"。
列:
Plan (PlanID, Name)
PlanType (PlanID, TypeID, Price, Setup)
Type (TypeID, Name)
只需添加" PlanType"当有一个类型的计划: - )