需要有关数据库设计和表结构的建议

时间:2013-05-25 12:08:57

标签: php mysql database database-design relational-database

我是编程和数据库的新手。到目前为止,我已经阅读了针对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

其中类别,子类别和项目都被分成不同的表格,分别由CategoryID,SubCategoryID和ItemID标识。

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

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

这种结构虽然看似麻烦,但却是最灵活的,允许用户轻松编写各种查询 - 公司总销售额,分支机构总销售额等。定义数据库时可能不太清楚但是当你被要求进行一些你没有预料到的数据聚合时,你会很感激这一点。

将所有内容保存在一个表中是一个非常糟糕的主意:让我们说汉堡王被The Grill Master(一个发明的名称)接管:这样你只需改变一条记录来反映变化,而使用一条巨大的表,你将不得不更新许多记录。

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

如果以上看起来居高临下,我道歉;我是一名博士候选人,正在考虑在使用关系数据库的公司中使用Excel,所以我的观点有点偏颇。