2013-05-25 68 views
0

我对编程和数据库一般都不熟悉。到目前为止,我已经阅读了PHP.MYSQL for DUmmies第4版,并试图创建一个存储商店菜单/库存的我自己的数据库。我目前使用XAMPP/MYSQL。是我的数据库的关于数据库设计和表格结构需要的建议

示例表如下:

SHOPINFO 

Shopname Outlet   Category Subcategory  Item 
PizzaHut Main   Drinks  Carbonated  Cola 
PizzaHut Main   Drinks  Non-carbonated Orange Juice 
BurgerKing Central London Burgers  Beef    Whopper 
BurgerKing South London Burgers  Beef    Whopper Jr. 
BurgerKing South London Drinks  Carbonated  Cola 

目前我知道如果我要了分割上表为:

SHOPINFO 
Shopname Outlet   Category Subcategory Item 
PizzaHut Main    1   1    1 
PizzaHut Main    1   2    3 
BurgerKing Central London 1   5    4 
BurgerKing South London  1   5    7 
BurgerKing South London  3   3    2 

凡类别,子类别和项目都拆分成不同的表,它们分别由其CategoryID,SubCategoryID和ItemID标识。

上的两个重要的问题,我已经对这项决定是:

1.Would它确实是有益的,拆表吗?我这样问,因为查询第一张表而不是第二张表会容易得多? E.g我可以简单地这样做

$query="SELECT * FROM SHOPINFO WHERE Shopname='BurgerKing' AND 
Outlet='South London' AND Category='Drinks' AND 
Subcategory='Carbonated'"; 
$result=mysqli_query($cxn,$query) or die("Error"); 
while($row=mysqli_fetch_assoc) 
{ 
extract($row); 
echo "$Item"; 
} 

,而不是将有如果表被分裂做查询(我不知道该怎么做,而且使得我的心伤)。

2.如果我要拆分表格,我猜我必须为每个商店的Category,SubCategory和Item创建单独的表格,使用Shopname & Outlet作为主键,我会然后使用外键链接到SHOPINFO表,可能使用ON DELETE CASCADE & ON UPDATE CASCADE。主要的问题是,除了使查询更加复杂之外,究竟会带来哪些好处?

PS:我的担忧有关未来的可扩展性(延续增加的国家,城市,国家在未来的奥特莱斯)

咨询,求助,意见,侮辱和烈焰红唇赞赏。

谢谢!

回答

1

我认为你的整个结构是错误的。您需要将所有内容分成单独的表格,从一张公司的表格开始 - 必胜客和汉堡王是您展示的唯一条目。然后你需要一个分支表,它包含一个公司的外键,以及关于每个分支的原子数据,如分支号码,地址等等。然后你需要一个分类表,其数据看起来像是饮料或汉堡,通过包含该类别的外键的子类别表(碳酸化的,非碳酸化的,牛肉,鸡肉等)。你需要一个产品表(可乐,橙汁,whopper,whopper jnr),它有一个子类别的外键。最后,会有一个分支产品连接表,它具有两个字段(分支号,产品编号)。

这个结构虽然看起来很麻烦,但却是最灵活的,可以很容易地编写各种查询 - 公司总销售额,分公司总销售额等等。当你定义你的数据库,但是当你被要求提供一些你没有预见到的数据聚合时,你将会很感激。

将所有东西都放在一张桌子里是一个非常糟糕的主意:假设汉堡王被The Grill Master(一个发明的名字)接管:这样,您只需要更改一条记录以反映更改,而使用一张巨大的桌子,你将不得不更新许多记录。

“巨​​大的一张桌子”方法来自使用Excel作为他们的数据库管理员的人,基本上没有任何更复杂的经验。专业答案是使用一个关系数据库,一切都分成表格。

我道歉,如果上面似乎居高临下;我是一位在使用关系数据库的公司中研究使用Excel的博士候选人,所以我有点偏向于我的观点。

+1

我会将此添加为评论,而不是我原来的答案的一部分:不要试图将价格添加到分支产品表中。虽然这允许分支机构以不同的价格销售相同的产品,但这也是不正确的,因为没有记录历史记录。您需要一个带有分支,产品,价格和日期的单独表格,以便正确存储这些信息。 –

+0

我很感谢你的回答。我的确在想Excel,特别是把所有东西都放到一个巨大的表格中,然后通过过滤器分类出来。 –