我的数据库设计是否正确?

时间:2017-04-30 13:23:07

标签: sql database sqlite database-design entity-relationship

我有桌子叫: 购物中心 2.存储 3.产品

商城显然可以有多个商店,商店可以有多个商品。那么这应该是一种识别关系,因为商店在没有购物中心的情况下不存在,产品不能存在而不属于商店(至少我不想要它们)?

令我感到困惑的是,如果我使用MySQL Workbench创建此设计(即使我在我的项目中使用SQLite),它将在Product表中创建3个主键,其中2个引用之前的表。不应该在Product表中只提供对Store表的引用,因为它是之前的步骤吗?

如何在具有特定名称的产品中查询这样的数据库设计,并且它存在于具有商店"商店1"和"商店2"?

谢谢!

1 个答案:

答案 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';

这将返回特定商店下特定商城的产品详细信息。