0

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

类别、子类别和项目都被拆分到不同的表中,它们分别由其类别 ID、子类别 ID 和项目 ID 标识。

我对这个决定的两个主要问题是:

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 作为主键,然后我将链接到带有外键的 SHOPINFO 表,可能使用 ON DELETE CASCADE & ON UPDATE CASCADE。主要问题是,除了使查询更加复杂之外,这样做究竟会带来什么好处?

PS:我担心的是未来的可扩展性。(例如,将来将国家、城市、州添加到奥特莱斯)

建议,帮助,意见,侮辱和燃烧表示赞赏。

谢谢!

4

1 回答 1

1

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

这种结构虽然看起来很麻烦,但却是最灵活的,可以轻松编写各种查询——按公司的总销售额、按分公司的总销售额等。在定义数据库时可能不清楚,但你会将来当您被要求进行一些您没有预见到的数据聚合时,您会很感激这一点。

把所有东西都放在一张桌子上是一个非常糟糕的主意:假设汉堡王被烧烤大师(一个发明的名字)接管了:这样你只需要改变一条记录来反映变化,而当使用一张巨大的桌子时,您将不得不更新许多记录。

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

如果上述内容显得居高临下,我深表歉意;我是一名博士生,正在研究在使用关系数据库的公司中使用 Excel,所以我的观点有些偏见。

于 2013-05-25T14:43:21.170 回答