解决数据库关系循环
Resolve the database relationship cycle
在数据库中我有这样一个模型:
客户可以租车,也可以租车。如您所见,Car 具有 OwnerID - 拥有汽车的客户,但同时客户也可以从其他车主那里租用汽车,因此在订单 table 中,他显示为用户。
那么如何更改模型以避免此类循环,甚至可能吗?
根据我的理解,我认为所有者(出租汽车的人)和租户(租车的人)有两个单独的个人资料并分别登录会更好
User Owner Tenant Order
------ ------ ------- -------
id owner_id tenant_id owner_id
email user_id user_id tenant_id
car_id
希望对您有所帮助!
考虑识别(存储在表中)
- 所有者是谁,他们拥有什么,
- 客户是谁。
.
create table persons (
-- I prefer "people". YMMV.
person_id integer primary key,
person_name varchar(25) not null
-- Other columns go here.
);
create table cars (
-- VIN might be a better choice.
car_id integer primary key
-- Other columns go here.
);
create table car_owners (
-- Only car owners known to us can rent out a car.
car_id integer not null
references cars(car_id),
owner_id integer not null
references persons (person_id),
primary key (car_id, owner_id)
-- Other columns go here.
);
create table customers (
-- Any person can rent a car. (But some persons are not customers.)
customer_id integer primary key
references persons (person_id)
-- Other columns go here.
);
create table rentals (
customer_id integer not null
references customers (customer_id),
car_id integer not null,
owner_id integer not null,
primary key (customer_id, car_id, owner_id),
-- Don't rent a car unless we know who the owner is.
foreign key (car_id, owner_id)
references car_owners (car_id, owner_id)
-- Other columns go here.
);
在数据库中我有这样一个模型:
客户可以租车,也可以租车。如您所见,Car 具有 OwnerID - 拥有汽车的客户,但同时客户也可以从其他车主那里租用汽车,因此在订单 table 中,他显示为用户。
那么如何更改模型以避免此类循环,甚至可能吗?
根据我的理解,我认为所有者(出租汽车的人)和租户(租车的人)有两个单独的个人资料并分别登录会更好
User Owner Tenant Order
------ ------ ------- -------
id owner_id tenant_id owner_id
email user_id user_id tenant_id
car_id
希望对您有所帮助!
考虑识别(存储在表中)
- 所有者是谁,他们拥有什么,
- 客户是谁。
.
create table persons (
-- I prefer "people". YMMV.
person_id integer primary key,
person_name varchar(25) not null
-- Other columns go here.
);
create table cars (
-- VIN might be a better choice.
car_id integer primary key
-- Other columns go here.
);
create table car_owners (
-- Only car owners known to us can rent out a car.
car_id integer not null
references cars(car_id),
owner_id integer not null
references persons (person_id),
primary key (car_id, owner_id)
-- Other columns go here.
);
create table customers (
-- Any person can rent a car. (But some persons are not customers.)
customer_id integer primary key
references persons (person_id)
-- Other columns go here.
);
create table rentals (
customer_id integer not null
references customers (customer_id),
car_id integer not null,
owner_id integer not null,
primary key (customer_id, car_id, owner_id),
-- Don't rent a car unless we know who the owner is.
foreign key (car_id, owner_id)
references car_owners (car_id, owner_id)
-- Other columns go here.
);