我有两个(mysql)表-If (Input.GetKeyDown(KeyCode.Space))
{
switch (CAMERA_STATE)
{
case MAIN:
MainCamera.enabled = false;
FrontCamera.enabled = true;
break;
case FRONT:
FrontCamera.enabled = false;
LeftCamera.enabled = true;
break;
case LEFT:
LeftCamera.enabled = false;
RightCamera.enabled = true;
break;
case RIGHT:
RightCamera.enabled = false;
BackCamera.enabled = true;
break;
case BACK:
BackCamera.enabled = false;
MainCamera.enabled = true;
break;
default:
break;
}
}
和company
。它们的结构如下:
user
`user`
- id
- company_id (FK to company)
- name
`company`
- id
- name
- admin_user_id (FK to user)
表的user
表外键,反之亦然。
我想知道上面的模式是否还可以,如果这不是为什么不可行,可以采取什么措施来改善它。
答案 0 :(得分:2)
从总体上讲,您的数据模型很有意义。但是,您不能保证admin_user_id
指向同一公司的user
。您可以通过以下方法解决此问题:
create table users (
user_id int auto_increment primary key,
company_id int,
name varchar(255),
unique (company_id, user_id) -- redundant but desirable for the foreign key reference
);
create table companies (
company_id int auto_increment primary key,
name varchar(255),
admin_user_id int,
foreign key (company_id, admin_user_id) references users(company_id, user_id)
);
alter table users
add constraint fk_users_company_id
foreign key (company_id) references companies (company_id);
答案 1 :(得分:2)
如果它是您的业务领域的准确代表,那才是真正重要的。但是,SQL中可能存在问题。 SQL只允许一次更新一个表,因此公司或用户必须先更新。通常,当您插入没有相应用户的新公司时,或者插入没有相应公司的新用户时,您必须允许临时打破约束。为此,您可以使外键之一为空,或者可以暂时禁用约束。
某些数据建模者不喜欢循环依赖,即使在纯概念模型中,SQL的限制都不相关。少数人会将循环依赖视为建模错误-我认为是错误的。循环依存关系的拒绝似乎与ER建模特别相关。有趣的是,在对象角色建模中,循环自引用依赖关系是理所当然的,甚至对它们都有特殊的表示法(环形约束)。