相关疑难解决方法(0)

多对多弱实体

我有一个没有被另一个实体定义就不能存在的实体,我希望这个实体参与多对多关系。

例子:一个艺人有一张专辑(没有艺人就不能存在专辑),专辑也有很多曲目,但同一曲目可以存在于多个专辑中。

所以我们在专辑和曲目之间有一个多对多的关系。

如果专辑是弱实体,则其主键是引用艺术家的外键,因此它不能是表示多对多关系的另一个表的外键。

问题是:SQL中是否可以有这种关系,如果可以,我该如何表达?

foreign-key database-design referential-integrity

17
推荐指数
1
解决办法
2万
查看次数

如何对可以具有不同属性集的实体类型进行建模?

我在重新创建UsersItems之间具有一对多(1:M)关系的数据库时遇到了一些麻烦。

这很简单,是的;但是,每个Item 都属于某个类别(例如,汽车飞机),并且每个类别都有特定数量的属性,例如:

Car 结构体:

+----+--------------+--------------+
| PK | Attribute #1 | Attribute #2 |
+----+--------------+--------------+
Run Code Online (Sandbox Code Playgroud)

Boat 结构体:

+----+--------------+--------------+--------------+
| PK | Attribute #1 | Attribute #2 | Attribute #3 |
+----+--------------+--------------+--------------+
Run Code Online (Sandbox Code Playgroud)

Plane 结构体:

+----+--------------+--------------+--------------+--------------+
| PK | Attribute #1 | Attribute #2 | Attribute #3 | Attribute #4 |
+----+--------------+--------------+--------------+--------------+
Run Code Online (Sandbox Code Playgroud)

由于属性(列)数量的这种多样性,我最初认为为每个Category创建一个单独的表是个好主意,因此我会避免多个NULL,从而更好地利用索引。

虽然一开始看起来不错,但我找不到通过数据库创建ItemsCategories之间关系的方法,因为至少以我作为数据库管理员的经验来看,在创建外键时,我明确地通知了数据库表名和列。

最后,我想要一个可靠的结构来存储所有数据,同时拥有所有方法来列出用户可能通过一个查询拥有的所有 …

mysql database-design subtypes

14
推荐指数
1
解决办法
1万
查看次数

模拟每个音乐艺术家都是一个团体或独奏者的场景

我必须为涉及音乐艺术家描述的业务环境设计实体关系图 (ERD) ,我将在下面详细说明。

场景描述

  • 一个艺术家有一个名称,且必须要么 一个独奏演员(但不能同时)。

  • 一个小组由一名或多名独舞者组成,并有若干成员(应根据组成该独奏者人数计算)。

  • 一个独奏演员可能是一个会员众多的群体或无的集团,并可以播放一个或多个仪器

如何构建一个 ERD 来表示这种场景?我对它的“或”部分感到困惑。

erd database-design database-diagrams subtypes many-to-many

13
推荐指数
1
解决办法
6809
查看次数

处理有关调查、问题和响应的数据库中冗余外键的最佳数据建模方法

我正在寻找有关存储调查、问题和响应的最佳关系建模方法的建议。

我正在寻找以下两种方法中的哪一种看起来最好,或者另一种方法。

我至少有这些实体:

  • 民意调查

至少有这些关系:

  • 每个调查有 1 个或多个问题。
  • 每个问题可用于 0 个或多个调查。
  • 每个人可以参加 0 个或多个调查。

这就是我遇到麻烦的地方:如何对一个人对调查问题的回答进行建模。

这是我考虑过的两种方法,对我来说似乎都不是很好。此处的图表已大大简化以说明问题。

方法一: 方法一

我不喜欢这种方法的地方:

  • survey_person_question_response表有两个不同的列引用调查:survey_question_survey_idsurvey_person_survey_id
    • survey_id在这两列的一行中引用不同的是错误的。survey_question 必须与该人在survey_person 中进行的调查来自同一个调查。我看不出有什么好的方法来强制执行此操作。
  • 似乎我在这里所做的是在两种关系之间建立关系。出于某种原因,这对我来说是错误的。

方法二:

尽量避免方法 1 中的两个 FK 应该引用相同的值...... 在此处输入图片说明

我不喜欢这种方法的地方:

  • 没有强制规定question_idsurvey_idFK 来自有效的survey_question
  • 没有强制规定survey_idperson_idFK 来自有效的survey_person

任何建议:

  • 这些方法之一是否是典型方法
  • 其中一种方法相对于另一种方法的优缺点
  • 完全安排这些数据的更好方法

将不胜感激!

erd database-design

13
推荐指数
1
解决办法
2042
查看次数

设计友谊数据库结构:我应该使用多值列吗?

假设我有一个名为 的表User_FriendList,它具有以下特征:

CREATE TABLE User_FriendList (
    ID ...,
    User_ID...,
    FriendList_IDs...,
    CONSTRAINT User_Friendlist_PK PRIMARY KEY (ID)
);
Run Code Online (Sandbox Code Playgroud)

让我们假设该表包含以下数据:

 +----+---------+---------------------------+
 | 身份证| 用户 ID | 好友            列表_ID |
 +----+---------+---------------------------+
 | 1 | 102 | 2:15:66:35:26:17: |
 +----+---------+---------------------------+
 | 2 | 114 | 1:12:63:33:24:16:102 |
 +----+---------+---------------------------+
 | 3 | 117 | 6:24:52:61:23:90:97:118 |
 +----+---------+---------------------------+

注:该“:”当(冒号)是分隔符爆炸在PHP成array

问题

所以:

  • 这是一个方便的方式来“存储”的IDsFriendList

  • 或者,相反,我是否应该让FriendId每一行只有一个值,并且当我需要检索给定列表的所有行时,只需执行如下查询SELECT * FROM UserFriendList WHERE UserId = …

normalization foreign-key database-design relational-theory

13
推荐指数
1
解决办法
1万
查看次数

为多种用户类型及其联系信息建模数据库结构

我正在设计一个数据库来存储不同类型的用户。主要(但不完全)他们将是演员、导演和作家。目前只有四种相关的用户类型。这个数字有增加的可能性,但概率很低——在这种情况下,这个数字会非常小。

该计划是有一个users几乎完全负责登录站点的表(name,emailpassword列加上一两个其他的,例如它们是否已被批准,和 update_at),以及每个用户类型的附加表,每个用户类型有自己独特的一组列。例如,只有演员才有种族栏,只有导演才有简历栏,只有作家需要提供他们的位置。但是,由于我之前没有管理过如此复杂的数据库,我想知道如何组织几个方面:

首先,用户可以是上述类型中的任意一种或任意组合。所以我知道我需要像(例如)一个director_user带有director_iduser_id列的表格。那么这是否足以能够按角色类型等过滤所有用户?

其次,大多数用户会选择 Twitter 个人资料和电话号码。并且所有演员都必须至少包含一个 URL,用于其他任何在线演员的个人资料;目前他们可以包括三个,但这个数字可能会增加。我是否正确假设每个可能的配置文件/联系方法的单独表格是组织数据的最佳方式?

mysql database-design

12
推荐指数
2
解决办法
1万
查看次数

为资金转移业务开发数据库,​​其中 (a) 个人和组织可以 (b) 发送和接收资金

在相关的业务背景,既成员组织需要有一个帐户资金资金可以转移

  • 会员会员
  • 会员组织
  • 组织组织,以及
  • 组织成员

注意事项

为了为这种场景构建数据库,我创建了以下三个表:

CREATE TABLE Members ( 
  memberid serial primary key, 
  name varchar(50) unique, 
  passwd varchar(32), 
  account integer 
);

CREATE TABLE Organizations (  
  organizationid serial primary key, 
  name varchar(150) unique, 
  administrator integer references Members(memberid), 
  account integer 
);

CREATE TABLE TransferHistory  
  "from" integer, -- foreign key?
  "to" integer, -- foreign …
Run Code Online (Sandbox Code Playgroud)

postgresql database-design subtypes

8
推荐指数
1
解决办法
3045
查看次数

何时使用唯一组合键?

在创建数据库结构时,我倾向于为每组需要唯一的数据创建唯一的复合键。在它们旁边我通常使用主键(通常是 INT AI id),除非复合键确实足以识别记录。

一方面,好处是我可以避免插入“坏记录”。是否存在这些密钥的使用变得过多或数据库设计不佳的迹象?

database-design unique-constraint

6
推荐指数
1
解决办法
8640
查看次数

实体关系图和应用程序功能

我正在处理的应用程序的核心功能似乎只是关联实体。因此,一对多关系会产生“元数据”,这些“元数据”只会为我们的应用程序功能提供(以一种或另一种方式)关联实体。

现在我们有一个实体关系图 (ERD),它有很多一对多(超过 10 个表)和只有一个关联实体。它对该模型或应用程序有何看法?

是否可以改进,即,如果改进 ERD 以添加更多关联实体,应用程序是否可以绕过更多功能?

关联实体很少是否意味着应用程序的功能不会很丰富?

其他注意事项

我想知道的是:如果项目范围说明书导致 ERD 只有一个多对多关系和十几个一对多关系,那么这是否意味着该项目没有解决很多问题(功能)除了只数字化大量数据?

我认为,如果多对多较少,它们一开始只会镜像(除非我们为其他目的创建连接查询......)。

或者简单地说:大量的多对多关联是否意味着软件的功能将比少对多的软件更丰富(不要在这个想法中包括连接查询)?

erd database-design architecture application-design

6
推荐指数
1
解决办法
660
查看次数

如果同一产品有多个供应商,如何去除产品表中的数据冗余

我正在设计一个数据库,其中有不同的产品和供应商。例如,我有一个产品“手机”,比如说苹果 5S。这将通过我的网站从 Mapple、Mango 等不同供应商处出售。

我无法为每个供应商存储数据,因为这会导致数据冗余。我一直在考虑产品表的以下列:

  • 产品编号
  • 供应商编号
  • 产品名称
  • 价值
  • SKUID
  • 供应商名称
  • 还有很多...

在此处输入图片说明

我们可以看到产品名称每次都重复,导致数据冗余。

我主要关心的是如何避免数据冗余?如何设计Product表?

从评论中添加:

  • 产品和供应商之间将存在多对多关系。
  • 供应商和供应商是相同的。它是一个像店主一样的小组织,被我们列出来。
  • 将有许多不同的店主,他们都可能拥有相同的产品。它会每天增加。假设我们有 1000 个店主(供应商),每个店主有 100 个相同的产品,那么不需要的数据就会有 1000*100 行。
  • 表中有更正 Vendor 和 Supplier 是一样的。关于个人或人。他们永远不会成为供应商。

normalization database-design

2
推荐指数
1
解决办法
2541
查看次数