2013-11-03 37 views
-2

我正在设计一个支持POS功能的MYSQL数据库。假设有一个有多个地点的业务(多个分支办事处),每个地点都必须唯一标识,但在具有自己的税收,产品,产品组和产品子组,客户等的层次结构中。DB Design建议位置和子位置

There需要成为一个主要地点,其他人则需要成为子地点。

这是将这些信息存储在事务数据库中的最佳方式?我是否应该使用一张表来存储主位置和子位置,并使用Self Join来检索层次结构?

实施例:

StoreID 
Sub_StoreID 
Store_Name 

Sub_StoreID将是空白的主要位置和他人它将存储一个ID

或者我应该选择两张表,并在下面提及。我应该复制产品的所有表吗?客户和其他人以更好的方式使其工作。

Primary_Location_Attributes, 
Secondary_Location_Attributes, 
Association_Primary_Secondary_locations 

让我知道如果问题不清楚,所以我可以尝试以不同的方式解释。

+0

By _location_ you mean _branch offices_? – geomagas

+0

是的,分支机构.. – VijayBez

+0

我猜“商业”(=主要位置)实体将具有不同于分支机构(=次要位置)的属性,所以我会选择两个表模型。该关联不是第三个表格所必需的,因为这个关系是1:N,所以一个简单的FK将会这样做。除非我错过了一些东西,那就是。 – geomagas

回答

1

另一个表中没有必要,你可以做一个parent_id属性:

CREATE TABLE offices(
    id INT PRIMARY KEY AUTO_INCREMENT, 
    parent_id INT REFERENCES offices(id), 
    ...  
); 

这将是一个家长或总行:

INSERT INTO offices (parent_id) VALUES(NULL); 

这将是一个邮政支局:

INSERT INTO offices (parent_id) VALUES(1);