这似乎有很多你正在开发的系统,可能有你没有提到的要求,所以它是不可能拿出一个完整的答案。但希望下面的一些内容能帮助你在描述时“设计概念化”。
1)这是一种非常常见的情况,有很多处理这些多对多关系的标准方法。
如果有2个实体A和B具有多对多关系,那么您通常会引入一个由2列组成的实体C--一个是A的唯一ID的外键,另一个是外键到B的唯一ID。并且您将删除实体A中指向B的外键列,反之亦然。
i。Ë
|-----|
| A |
|-----|
\|/
|
|
/|\
|-----|
| B |
|-----|
变为:
|-----| |-----|
| A | | B |
|-----| |-----|
| |
| |
| |
/|\ /|\
|-------------|
| C |
|-------------|
的主要挑战是什么经常称这些新的实体!有时他们可能只是像a_b_relationship,但如果能识别更有意义的名字是很好的。
2)看起来你需要做更多的分析来识别所有的实体。这样做的一种方法是通过对系统的描述并识别名词 - 通常如果描述中有名词,则适合在实体 - 关系图中包含实体。
“Order”作为您忽略的名词跳出。
通常对于订单处理,您将有2个实体 - 包含日期,总价值,客户等的订单以及标识订购了多少产品以及单个价格的子订单行。所以在电子商务中,购物车就是订单,而购物车中的每件商品都是订单记录。
在您的情况,我们就会有:
|----------| |-----------|
| client | | product |
|----------| |-----------|
| |
| |
| |
/|\ /|\
|-------------| /|-------------|
| order |--------| orderline |
|-------------| \|-------------|
3)客户销售各类产品
在这里,你要识别客户端的其他角色,什么我在这里做的是问题,即是否“客户“在这个阶段是一个合适的实体。您可能会发现在“买方”和“卖方”方面进行思考比较容易,直到理解了首次设计。如果买卖双方有很多共同点(特别是如果一个人既可以是买方也可以是卖方),那么您最终可能决定使用单一实体。您的ERD工具可能会为此提供支持 - 搜索“子类型实体”或“实体子类型”。
细节将取决于您的实际应用,但可能是每个订单行应与卖方有关系,并且订单与买方的关系。这将取决于例如买方是否有可能订购特定产品的多个项目,其中一些来自一个卖方而另一个来自另一个卖方。它可能变得复杂!
此外,考虑是否需要在销售之前记录卖家的股票可能会有所帮助。这里区分“产品”和“库存”可能是有用的,例如
|---------| |-----------|
| seller | | product |
|---------| |-----------|
| |
| |
| |
/|\ /|\
|-----------------|
| stock |
|-----------------|
作为一般性评论,我会说它真的可以帮助逐步完成设计过程。因此,一旦获得了初始模型,将需要存储的所有数据项分配给适当的实体,并有条不紊地确保设计处于第一范式,然后是第二范式,然后是第三范式。只有一旦你完成了这个任务,并且确信设计反映了需求,你应该考虑如何在数据库中实现设计。无论如何,这就是我多年前学到的东西!
有一个客户谁可以购买许多不同的产品和可以由许多不同的客户购买的产品表客户表。那么,如何在数据库设计中不允许多对多关系的情况下将其分解。 – user3127109 2014-12-06 07:07:48
@ user3127109:这是不同的问题,我编辑了我的答案。请阅读编辑部分。 – 2014-12-06 09:10:38