我有桌子叫: 购物中心 2.存储 3.产品
商城显然可以有多个商店,商店可以有多个商品。那么这应该是一种识别关系,因为商店在没有购物中心的情况下不存在,产品不能存在而不属于商店(至少我不想要它们)?
令我感到困惑的是,如果我使用MySQL Workbench创建此设计(即使我在我的项目中使用SQLite),它将在Product表中创建3个主键,其中2个引用之前的表。不应该在Product表中只提供对Store表的引用,因为它是之前的步骤吗?
如何在具有特定名称的产品中查询这样的数据库设计,并且它存在于具有商店"商店1"和"商店2"?
谢谢!
答案 0 :(得分:0)
您必须避免在数据库中重复依赖。您具有以下数据库结构。
Mall --> (1:n) Store --> (1:n) Product
根据您的设计,没有商店,产品的依赖性就不存在了。商场不能包含没有商店的产品,对吗?
Mall --> (1:n) Product {Cannot exist}
因此,将mall外键添加到product表是没有意义的。 这是db结构的示例SQL语句。
create table if not exists mall (
mall_id int(11) AUTO_INCREMENT PRIMARY KEY,
mall_name varchar(255) NOT NULL
)
create table if not exists store (
store_id int(11) AUTO_INCREMENT PRIMARY KEY,
store_name varchar(255) NOT NULL,
mall_id int(11) ,
CONSTRAINT 'mall_Id_FK' FOREIGN KEY (mall_id) REFERENCES mall(mall_Id) ON UPDATE CASCADE ON DLETE CASCADE
);
create table if not exists product (
product_id int(11) AUTO_INCREMENT PRIMARY KEY,
product_name varchar(255) NOT NULL,
store_id int(11) ,
CONSTRAINT 'store_Id_FK' FOREIGN KEY (store_id) REFERENCES store(store_id) ON UPDATE CASCADE ON DLETE CASCADE
);
另外关于你的问题,你如何根据商店和商场qyery产品数据:
How would I query in a database design like this for a product that has a specific name and it exists in a mall that has stores "Store 1" and "Store 2"?
时
SELECT a.product_id, a.product_name
from product a ,
store b,
mall c
where
a.store_id = b.store_id and
b.mall_id= c.mall_id and
c.mall_name = 'Mall1' and
b.store_name IN ('Store1' ,'Store2') and
a.product_name = 'Product1';
这将返回特定商店下特定商城的产品详细信息。