mysql数据库设计结构帮助
我对数据库和mysql还不熟悉,我正试图了解如何设计我的数据库。我正在做一个测试项目,人们可以在这个项目中查看他们在某些橱柜中的物品。因此,用户可以单击橱柜,查看其中的所有架子以及每个架子上的所有物品 到目前为止,我已经计算出我需要以下表格:mysql数据库设计结构帮助,mysql,database-design,Mysql,Database Design,我对数据库和mysql还不熟悉,我正试图了解如何设计我的数据库。我正在做一个测试项目,人们可以在这个项目中查看他们在某些橱柜中的物品。因此,用户可以单击橱柜,查看其中的所有架子以及每个架子上的所有物品 到目前为止,我已经计算出我需要以下表格: Item Table Item ID, Item Name Shelf Table Shelf ID, Shelf Number Cabinet Table Cabinet ID, Cabinet Name 我的重点是我需要什么关系表?我
Item Table
Item ID, Item Name
Shelf Table
Shelf ID, Shelf Number
Cabinet Table
Cabinet ID, Cabinet Name
我的重点是我需要什么关系表?我相信这对某人来说真的很容易
请给我第四张桌子,上面放着:
ItemID, Shelf ID, Cabinet ID
这样我就可以查询橱柜中的所有架子以及每个架子上的物品,这有意义吗?我相信这很容易回答,但我的大脑很痛!我被告知,如果MyIsam有帮助的话,可以将其用作存储引擎
谢谢
编辑:
谢谢,如果你不介意的话,还有一个问题。您知道如何获取所有工具架中的所有项目,以便它们在html中显示如下:
<div id="shelf-1"><p>spoon</p><p>fork</p>
<div id="shelf-2"><p>knife</p></div>
勺子叉子
刀
我有以下几点似乎是可行的,但通过阅读,我不认为在查询中循环是一种好的做法:
$cabinetID = $_GET['cabinetid'];
$sqlShelf = sprintf(' SELECT shelf_id
FROM shelf
INNER JOIN cabinet ON (cabinet.cabinet_id = shelf.cabinet_id)
WHERE cabinet.cabinet_id = %s', $cabinetID);
$resultShelf = mysql_query($sqlShelf);
while($shelf = mysql_fetch_assoc($resultShelf)) {
$shelfID = $shelf['shelf_id'];
$sqlItem = sprintf('SELECT *
FROM item
INNER JOIN shelf ON (item.shelf_id = shelf.shelf_id)
INNER JOIN cabinet ON (cabinet.cabinet_id = shelf.cabinet_id)
WHERE cabinet.cabinet_id = %s
AND shelf.shelf_id = %s', $cabinetID, $shelfID);
$resultItem = mysql_query($sqlItem);
echo('<div>');
while($item = mysql_fetch_assoc($resultItem)) {
echo('<p>' . $item['item_name'] . '</p>' . PHP_EOL);
}
echo('</div>');
$cabinetID=$\u获取['cabinetID'];
$sqlShelf=sprintf('SELECT shelf_id
现货
打开内部连接机柜(cabinet.cabinet\u id=shelf.cabinet\u id)
其中cabinet.cabinet_id=%s',$cabinetID);
$resultShelf=mysql\u查询($sqlShelf);
而($shelf=mysql\u fetch\u assoc($resultShelf)){
$shelfID=$shelf['shelf_id'];
$sqlItem=sprintf('选择*
从项目
上的内部连接架(item.shelf\u id=shelf.shelf\u id)
打开内部连接机柜(cabinet.cabinet\u id=shelf.cabinet\u id)
其中cabinet.cabinet\u id=%s
和shelf.shelf_id=%s',$cabinetID,$shelfID);
$resultItem=mysql\u查询($sqlItem);
回声(“”);
而($item=mysql\u fetch\u assoc($resultItem)){
echo(“”.$item['item\u name'.”.PHP\u EOL);
}
回声(“”);
在编写SQL之前,先用英语思考一下
您可以有许多橱柜;每个橱柜有零个或多个搁板;每个搁板上可以有零个或多个项目
一个架子一次只能在一个橱柜中;一个项目一次只能在一个架子上
所以我将其设计为三个表,其中两个表有一对多的关系
CREATE TABLE IF NOT EXISTS cabinet
(
cabinet_id bigint not null auto_increment,
primary key(cabinet_id)
);
CREATE TABLE IF NOT EXISTS shelf
(
shelf_id bigint not null auto_increment,
cabinet_id bigint,
primary key(shelf_id),
foreign key(cabinet_id) references cabinet(cabinet_id) on delete cascade on update cascade
);
CREATE TABLE IF NOT EXISTS item
(
item_id bigint not null auto_increment,
shelf_id bigint,
primary key(item_id),
foreign key(shelf_id) references shelf(shelf_id) on delete cascade on update cascade
);
下面是一个示例查询,它将为您获取特定文件柜中的所有项目(刚刚尝试过-效果很好):
在这三个表之间需要两个表来保存对应关系的数据
Shelf_Cabinet Table
ShelfID, CabinetID
及
如果货架和橱柜、物品和货架之间存在多对多的关系,这是真的,但我不相信物理学会允许。谢谢,这很好,有助于这样思考。我真的可以厚颜无耻地得到一个示例查询吗!这不会让我,我没有足够的代表:(
Shelf_Cabinet Table
ShelfID, CabinetID
Item_Shelf Table
ItemID, ShelfID