我是编程和数据库的新手。到目前为止,我已经阅读了适用于DUmmies的PHP.MYSQL 4th Edition,并且正在尝试创建自己的数据库来存储商店的菜单/库存。我目前正在使用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进行标识。

关于此决定,我有2个主要问题:

1.拆分表真的有益吗?我问这是因为查询第一个表而不是第二个表会容易得多吗?例如,我可以做类似的事情

$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.如果我要拆分表,我想我将不得不使用Shopname&Outlet作为主键为Category,SubCategory和Item的每个商店创建单独的表,然后链接到带外键的SHOPINFO表,可能使用ON DELETE CASCADE和ON UPDATE CASCADE。主要问题是,除了使查询更加复杂之外,这样做究竟会带来什么好处?

PS:我担心的是未来的可扩展性。(例如,将来在出口中添加国家,城市,州)

建议,帮助,意见,侮辱和火焰。

谢谢!

最佳答案

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

这种结构虽然看起来很麻烦,但却是最灵活的结构,它允许人们毫不费力地编写各种查询-按公司划分的总销售额,按分支机构划分的总销售额等。在定义数据库时可能不清楚,但是您可以将来当您被要求进行一些未预料到的数据聚合时,请对此表示感谢。

将所有内容保存在一个表中是一个非常糟糕的主意:比方说,汉堡王(Berger King)由The Grill Master(一个发明的名称)接管:通过这种方式,您只需要更改一条记录即可反映更改,而使用一张大表时,您将不得不更新许多记录。

“巨大的一张表”方法来自使用Excel作为其数据库管理器的人员,并且基本上没有任何更复杂的经验。专业的答案是使用关系数据库,将所有内容拆分为表格。

如果上述情况屈服,我深表歉意。我是一名博士候选人,正在研究在使用关系数据库的公司中使用Excel的情况,因此我的观点有些偏颇。

关于php - 有关数据库设计和表结构的建议,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16749410/

10-11 14:13
查看更多