Database design 在其他两个实体之间共享一个实体的类型
我正在使用TypeORM开发NestJS应用程序,有一个Database design 在其他两个实体之间共享一个实体的类型,database-design,nestjs,typeorm,Database Design,Nestjs,Typeorm,我正在使用TypeORM开发NestJS应用程序,有一个个人实体和一个业务实体。这些实体中的每一个都可以有0个或多个地址e。无论是针对业务还是人员,地址字段都是相同的。因此,我希望将所有地址放在一个表中,而不是管理PersonalAddress和BusinessAddress表(前提是这是设计数据库的“正确”方法) 目前,这里是我的个人和地址实体的一部分: // person.entity.ts export class Person { @OneToMany(() => Addres
个人
实体和一个业务
实体。这些实体中的每一个都可以有0个或多个地址
e。无论是针对业务
还是人员
,地址字段都是相同的。因此,我希望将所有地址放在一个表中,而不是管理PersonalAddress
和BusinessAddress
表(前提是这是设计数据库的“正确”方法)
目前,这里是我的个人
和地址
实体的一部分:
// person.entity.ts
export class Person {
@OneToMany(() => Address, (address) => address.person, { cascade: true})
addresses: PersonAddress[]
}
// address.entity.ts
export class Address {
@ManyToOne(() => Person, (person) => person.addresses)
person: Person
}
我相信对于TypeORM来说,这是正确的方法,但是我希望能够删除Address
中对Person
的引用,这样我就可以在业务
中使用相同的实体
现在,我的问题分为两部分:
Business
和Person
的地址创建一个单独的实体我假设实体
业务
和人员
之间没有关系
当前数据库设计中存在一个问题-
删除一个人将删除与该特定人关联的所有地址。如果同一地址(由于删除某人而被删除)与某些业务关联,则会导致问题
我宁愿创建一个单独的链接表BusinessAndPersonAddress
,其中businessId
和personId
是外键。这样,您可以将同一地址与多个企业和个人关联
在这种情况下,删除person将仅删除链接表
businessandPersonalAddress
中与被删除人员相关联的地址条目,以及与某些业务相关联的地址条目,不会受到影响。我假设实体业务
和人员
之间没有关系
当前数据库设计中存在一个问题-
删除一个人将删除与该特定人关联的所有地址。如果同一地址(由于删除某人而被删除)与某些业务关联,则会导致问题
我宁愿创建一个单独的链接表BusinessAndPersonAddress
,其中businessId
和personId
是外键。这样,您可以将同一地址与多个企业和个人关联
在这种情况下,删除person将仅删除链接表businessandPersonalAddress
中与被删除的人相关联的地址条目,并且地址条目(如果与某些业务相关)将不受影响
export class Person {
@Column()
name: string
// etc...
@OneToMany(() => Address, (address) => address.person)
addresses: Address[]
}
export class Business {
@Column()
name: string
// etc...
@OneToMany(() => Address, (address) => address.business)
addresses: Address[]
}
export class Address {
@Column()
name: string
// etc...
@ManyToOne(() => Person, (p) => p.addresses)
person: Person
@ManyToOne(() => Business , (b) => b.addresses)
business: Business
}
export class Person {
@Column()
name: string
// etc...
@ManyToMany(() => Address)
addresses: Address[]
}
export class Business {
@Column()
name: string
// etc...
@ManyToMany(() => Address)
addresses: Address[]
}
export class Address {
@Column()
name: string
// etc...
}
business.entity.ts
export class Person {
@Column()
name: string
// etc...
@OneToMany(() => Address, (address) => address.person)
addresses: Address[]
}
export class Business {
@Column()
name: string
// etc...
@OneToMany(() => Address, (address) => address.business)
addresses: Address[]
}
export class Address {
@Column()
name: string
// etc...
@ManyToOne(() => Person, (p) => p.addresses)
person: Person
@ManyToOne(() => Business , (b) => b.addresses)
business: Business
}
export class Person {
@Column()
name: string
// etc...
@ManyToMany(() => Address)
addresses: Address[]
}
export class Business {
@Column()
name: string
// etc...
@ManyToMany(() => Address)
addresses: Address[]
}
export class Address {
@Column()
name: string
// etc...
}
address.entity.ts
export class Person {
@Column()
name: string
// etc...
@OneToMany(() => Address, (address) => address.person)
addresses: Address[]
}
export class Business {
@Column()
name: string
// etc...
@OneToMany(() => Address, (address) => address.business)
addresses: Address[]
}
export class Address {
@Column()
name: string
// etc...
@ManyToOne(() => Person, (p) => p.addresses)
person: Person
@ManyToOne(() => Business , (b) => b.addresses)
business: Business
}
export class Person {
@Column()
name: string
// etc...
@ManyToMany(() => Address)
addresses: Address[]
}
export class Business {
@Column()
name: string
// etc...
@ManyToMany(() => Address)
addresses: Address[]
}
export class Address {
@Column()
name: string
// etc...
}
如果您坚持不在您的地址中包含多通电话
,您可以通过建立关系来避免这种情况。请记住,这将以更大的查询和更多的表的形式产生一些开销。这是因为多对多将创建一个联接表,需要额外的联接才能从数据库中获取数据。这一切都由orm tho负责
这将使:
person.entity.ts
export class Person {
@Column()
name: string
// etc...
@OneToMany(() => Address, (address) => address.person)
addresses: Address[]
}
export class Business {
@Column()
name: string
// etc...
@OneToMany(() => Address, (address) => address.business)
addresses: Address[]
}
export class Address {
@Column()
name: string
// etc...
@ManyToOne(() => Person, (p) => p.addresses)
person: Person
@ManyToOne(() => Business , (b) => b.addresses)
business: Business
}
export class Person {
@Column()
name: string
// etc...
@ManyToMany(() => Address)
addresses: Address[]
}
export class Business {
@Column()
name: string
// etc...
@ManyToMany(() => Address)
addresses: Address[]
}
export class Address {
@Column()
name: string
// etc...
}
business.entity.ts
export class Person {
@Column()
name: string
// etc...
@OneToMany(() => Address, (address) => address.person)
addresses: Address[]
}
export class Business {
@Column()
name: string
// etc...
@OneToMany(() => Address, (address) => address.business)
addresses: Address[]
}
export class Address {
@Column()
name: string
// etc...
@ManyToOne(() => Person, (p) => p.addresses)
person: Person
@ManyToOne(() => Business , (b) => b.addresses)
business: Business
}
export class Person {
@Column()
name: string
// etc...
@ManyToMany(() => Address)
addresses: Address[]
}
export class Business {
@Column()
name: string
// etc...
@ManyToMany(() => Address)
addresses: Address[]
}
export class Address {
@Column()
name: string
// etc...
}
address.entity.ts
export class Person {
@Column()
name: string
// etc...
@OneToMany(() => Address, (address) => address.person)
addresses: Address[]
}
export class Business {
@Column()
name: string
// etc...
@OneToMany(() => Address, (address) => address.business)
addresses: Address[]
}
export class Address {
@Column()
name: string
// etc...
@ManyToOne(() => Person, (p) => p.addresses)
person: Person
@ManyToOne(() => Business , (b) => b.addresses)
business: Business
}
export class Person {
@Column()
name: string
// etc...
@ManyToMany(() => Address)
addresses: Address[]
}
export class Business {
@Column()
name: string
// etc...
@ManyToMany(() => Address)
addresses: Address[]
}
export class Address {
@Column()
name: string
// etc...
}
export class Person {
@Column()
name: string
// etc...
@OneToMany(() => Address, (address) => address.person)
addresses: Address[]
}
export class Business {
@Column()
name: string
// etc...
@OneToMany(() => Address, (address) => address.business)
addresses: Address[]
}
export class Address {
@Column()
name: string
// etc...
@ManyToOne(() => Person, (p) => p.addresses)
person: Person
@ManyToOne(() => Business , (b) => b.addresses)
business: Business
}
export class Person {
@Column()
name: string
// etc...
@ManyToMany(() => Address)
addresses: Address[]
}
export class Business {
@Column()
name: string
// etc...
@ManyToMany(() => Address)
addresses: Address[]
}
export class Address {
@Column()
name: string
// etc...
}
business.entity.ts
export class Person {
@Column()
name: string
// etc...
@OneToMany(() => Address, (address) => address.person)
addresses: Address[]
}
export class Business {
@Column()
name: string
// etc...
@OneToMany(() => Address, (address) => address.business)
addresses: Address[]
}
export class Address {
@Column()
name: string
// etc...
@ManyToOne(() => Person, (p) => p.addresses)
person: Person
@ManyToOne(() => Business , (b) => b.addresses)
business: Business
}
export class Person {
@Column()
name: string
// etc...
@ManyToMany(() => Address)
addresses: Address[]
}
export class Business {
@Column()
name: string
// etc...
@ManyToMany(() => Address)
addresses: Address[]
}
export class Address {
@Column()
name: string
// etc...
}
address.entity.ts
export class Person {
@Column()
name: string
// etc...
@OneToMany(() => Address, (address) => address.person)
addresses: Address[]
}
export class Business {
@Column()
name: string
// etc...
@OneToMany(() => Address, (address) => address.business)
addresses: Address[]
}
export class Address {
@Column()
name: string
// etc...
@ManyToOne(() => Person, (p) => p.addresses)
person: Person
@ManyToOne(() => Business , (b) => b.addresses)
business: Business
}
export class Person {
@Column()
name: string
// etc...
@ManyToMany(() => Address)
addresses: Address[]
}
export class Business {
@Column()
name: string
// etc...
@ManyToMany(() => Address)
addresses: Address[]
}
export class Address {
@Column()
name: string
// etc...
}
如果您坚持不在您的地址中包含多通电话
,您可以通过建立关系来避免这种情况。请记住,这将以更大的查询和更多的表的形式产生一些开销。这是因为多对多将创建一个联接表,需要额外的联接才能从数据库中获取数据。这一切都由orm tho负责
这将使:
person.entity.ts
export class Person {
@Column()
name: string
// etc...
@OneToMany(() => Address, (address) => address.person)
addresses: Address[]
}
export class Business {
@Column()
name: string
// etc...
@OneToMany(() => Address, (address) => address.business)
addresses: Address[]
}
export class Address {
@Column()
name: string
// etc...
@ManyToOne(() => Person, (p) => p.addresses)
person: Person
@ManyToOne(() => Business , (b) => b.addresses)
business: Business
}
export class Person {
@Column()
name: string
// etc...
@ManyToMany(() => Address)
addresses: Address[]
}
export class Business {
@Column()
name: string
// etc...
@ManyToMany(() => Address)
addresses: Address[]
}
export class Address {
@Column()
name: string
// etc...
}
business.entity.ts
export class Person {
@Column()
name: string
// etc...
@OneToMany(() => Address, (address) => address.person)
addresses: Address[]
}
export class Business {
@Column()
name: string
// etc...
@OneToMany(() => Address, (address) => address.business)
addresses: Address[]
}
export class Address {
@Column()
name: string
// etc...
@ManyToOne(() => Person, (p) => p.addresses)
person: Person
@ManyToOne(() => Business , (b) => b.addresses)
business: Business
}
export class Person {
@Column()
name: string
// etc...
@ManyToMany(() => Address)
addresses: Address[]
}
export class Business {
@Column()
name: string
// etc...
@ManyToMany(() => Address)
addresses: Address[]
}
export class Address {
@Column()
name: string
// etc...
}
address.entity.ts
export class Person {
@Column()
name: string
// etc...
@OneToMany(() => Address, (address) => address.person)
addresses: Address[]
}
export class Business {
@Column()
name: string
// etc...
@OneToMany(() => Address, (address) => address.business)
addresses: Address[]
}
export class Address {
@Column()
name: string
// etc...
@ManyToOne(() => Person, (p) => p.addresses)
person: Person
@ManyToOne(() => Business , (b) => b.addresses)
business: Business
}
export class Person {
@Column()
name: string
// etc...
@ManyToMany(() => Address)
addresses: Address[]
}
export class Business {
@Column()
name: string
// etc...
@ManyToMany(() => Address)
addresses: Address[]
}
export class Address {
@Column()
name: string
// etc...
}