我知道 NoSQL 数据库(例如 MongoDB)无法使用实体关系“ER”图进行建模,因为它是无模式的,但我可以对 UML 进行建模,并且它显示了属性之间的关系,那么有什么区别以及为什么呢?
我目前正在使用 PlantUML 来设计数据库的 ERD。一切都很好,图表已经完成,但我正在尝试为我的实体添加背景颜色,以区分它们各自的模式。
我正在考虑实体的背景颜色,或者可能是一个将实体保存在其中的彩色矩形。
我尝试使用skinparam实体的名称及其别名......
skinparam entity {
backgroundColor<<usr>> DarkOrchid
}
Run Code Online (Sandbox Code Playgroud)
skinparam entity {
backgroundColor<<User>> DarkOrchid
}
Run Code Online (Sandbox Code Playgroud)
这些都不起作用...任何人都可以帮忙吗?
谢谢
========= 编辑
根据要求,举一个小例子:
'==========='
'auth schema'
entity "User" as usr {
*id : number <<PK>>
--
password: varchar
salt: varchar
role: number <<FK>>
last_login_at : datetime
is_active : boolean
}
entity "User Role" as url {
*id : number <<PK>>
--
name: varchar
clearance_lvl: text
is_active : boolean
}
'====================='
'personnel data schema'
entity "Professor" as prof { …Run Code Online (Sandbox Code Playgroud) 当我的数据库中的表具有PK/FK关系(int)时,当它们由实体框架设计器建模时,一切都应该如此.我可以编写下面的代码,一切似乎都可以正常工作但是当我运行代码时,我在项目上得到一个错误.Status.StatusName说Object引用没有设置为对象的实例.我想我的印象是,当您填充父实体时,框架会填充关联的实体.
Dim db As New MyDbModel.MyDbEntities()
Dim project As MyDbModel.Project = (From p In db.Project Where p.ProjectID = 1).First
Response.Write(project.ProjectName)
Response.Write(project.Status.StatusName)
Run Code Online (Sandbox Code Playgroud) linq-to-entities entity-relationship entity-framework associations
我在保存对数据库的更改时遇到问题.
我正在更新控制器中的模型A,但是当我使用SaveChanges()保存更改时,我最终在数据库中为B创建了一个重复的项目.
在调用UpdateModel()之后,我检查了Bs属性,它就像我预期的那样,在调用SaveChanges()后,如果我检查Bs属性,我将看到Id完全不同(新Id和新条目).
我的班级与此类似:
public class A
{
[HiddenInput(DisplayValue = false)]
public int AId { get; set; }
public string Name { get; set; }
public virtual ICollection<B> Bs{ get; set; }
}
public class B
{
[HiddenInput(DisplayValue = false)]
public int BId { get; set; }
public string Name { get; set; }
public virtual ICollection<A> As{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的控制器是这样的:
[HttpPost]
public ActionResult Edit(A theA)
{
try
{
db.Entry(theA).State = EntityState.Modified;
foreach (var item in theA.Bs)
{ …Run Code Online (Sandbox Code Playgroud) 我想在Powerdesigner中从ER图生成Sql表,但是,我不知道我该怎么做?我应该使用哪些工具?
sql diagram entity-relationship sql-server-2008 powerdesigner
当我从一对多关系的一侧检索实体时,我从集合中创建一个可变数组,该数组是关系中的实体集合.我操纵,编辑或以其他方式更改这些实体,可能删除现有或添加新实体.通过更改后,我只需使用数组创建一个新集,然后将原始集替换为我创建的集,如下所示:
self.myOneSideEntity.theManySideEntitiesRelationship = [NSSet setWithArray:myNewArrayOfEntities];
Run Code Online (Sandbox Code Playgroud)
在我看来,更换套装可能不会删除旧成员.他们发生了什么?这是编辑相关对象集合的正确方法吗?我是否会留下任何类型的孤儿或违反这种技术的最佳做法?
我的关系在一侧设置了反向级联删除,在许多方面无效,反向关系不是可选的.
我正在尝试通过转换我拥有的Web表单应用程序来学习asp.net MVC.这是一个房间预订应用程序,其中有一个客户表(tblCustomerBooking)与tblRental有一对多的关系 - 所以一个客户可以预订多个房间.彼此匹配的字段是tblCustomerBooking.customer_id - > tblRental.customer_ref
我正在尝试首先使用代码 - 并构建一个模型类 - 但我无法弄清楚如何链接这两个表,因此当我查询dbContext时,它将返回一个客户,其中有一个或多个租用同一型号.
我的表定义是:
CREATE TABLE [dbo].[tblCustomerBooking](
[customer_id] [bigint] IDENTITY(1,1) NOT NULL,
[room_id] [bigint] NULL,
[customer_name] [varchar](110) NULL,
[customer_email] [varchar](50) NULL
CONSTRAINT [PK_tblCustomerBooking] PRIMARY KEY CLUSTERED
(
[customer_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE TABLE [dbo].[tblRental](
[rental_id] [bigint] IDENTITY(1,1) NOT NULL,
[room_id] [bigint] NOT NULL,
[check_in] [datetime] NOT NULL,
[check_out] [datetime] NOT …Run Code Online (Sandbox Code Playgroud) 在关于实体关系图的每个教程中,我都知道不允许为关系指定固定的基数.只有关于ERD的非正式评论才能澄清飞行员的数量exactly 2.
因此,例如,航班和飞行员之间的关系,每个航班正好有2名飞行员,必须表示为:
<flight> 0..N <------> 1..N <pilot>
Run Code Online (Sandbox Code Playgroud)
而不是
<flight> 0..N <------> 2 <pilot>
Run Code Online (Sandbox Code Playgroud)
我的符号是0..N=可选的,很多; 1..N=强制性,许多,1=强制性,一个.
这种限制是否普遍?它背后的原因是什么?
编辑:澄清了我的记号.
编辑:我可以看到两个关系如何强制执行相同的约束:
0..N <------> 1
<flight> <pilot>
0..N <------> 1
Run Code Online (Sandbox Code Playgroud)
但是,查询飞行员是否在某个特定航班上的查询变得非常难看,因为您必须检查两个属性中的每一个.如果属性数量增加(例如,对15名空乘人员),则查询变得完全无法管理,并且架构几乎无法管理.
我有这3个实体的学生,工作人员和讨论.
他们的关系是这样的:1个学生可以发表很多讨论; 1名工作人员可以发表许多讨论 但是1次讨论只能由学生或工作人员发布.是否可以让外键studentID和staffID都驻留在讨论实体中?但这样做可能会使其中的每条记录在这两个属性中都有1个空值.
这是我的情况:
我有一个Article实体。每篇文章都有一个所有者(a User)。用户可以拥有许多文章。用户可以通过API发布文章。
我想user_id基于Bearer令牌自动设置文章的列(我正在使用JWT auth)。
我找不到任何有关如何执行此操作的文档。有人可以帮忙实现此目标吗?
注意:我正在寻找避免可能的情况下避免在Symfony中使用其他扩展(或控制器)的解决方案。我相信Api Platform应该可以使用内置技术来实现这一目标,但是我可能是错的。
这是我的实体:
用户:
<?php
namespace App\Entity;
use ApiPlatform\Core\Annotation\ApiResource;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* @ApiResource()
* @ORM\Table(name="users")
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
* @UniqueEntity(fields="email", message="Email already taken")
*/
class User implements UserInterface, \Serializable
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string $password
*
* @ORM\Column(type="string", length=64)
* @Assert\NotBlank()
*/
private $password;
/**
* @var …Run Code Online (Sandbox Code Playgroud) erd ×3
diagram ×2
associations ×1
code-first ×1
core-data ×1
doctrine ×1
ios ×1
many-to-many ×1
mongodb ×1
nosql ×1
php ×1
plantuml ×1
sql ×1
symfony ×1
uml ×1