gpt4 book ai didi

mysql - 客户、供应商及其员工

转载 作者:搜寻专家 更新时间:2023-10-30 22:00:30 28 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.

1年前关闭。




Improve this question




我正在设计一个客户可以从供应商处订购产品的市场。我需要帮助来定义数据库方案。

我有两种类型的公司:客户和供应商。供应商可以有自己的客户(一个客户可以属于多个供应商)。客户和供应商都可以拥有自己的员工:可以登录应用程序并根据其用户角色访问表的经理和助理,并且只能访问他们所属公司的记录。

注册到应用程序时,用户必须在注册表中选择用户类型(客户或供应商),然后注册后,他/她自动获得角色“经理”。之后,作为经理,他们可以添加公司信息和员工。只有经理可以将公司信息和员工添加到系统中。

客户和供应商可以有不同的公司属性,这就是我将它们分成两个表的原因。

  • 我为这种情况创建了以下架构,但不确定这是正确的方法。什么是更好的解决方案?
  • 这种情况会产生另一个问题:当经理注册时,他们被添加到 Employee 表中,但此时他们不属于任何公司,因为他们还没有添加公司信息,因此没有 customer_id 或 supplier_id员工表。只有当他们添加公司信息时,他们才会获得新公司的客户或供应商 ID(公司 ID)。但是,为了将他们与公司相关联,需要将此公司 id 添加回员工表中的经理记录中。我认为这不是应该的方式,但无法提出更好的解决方案。
    我正在尝试使用客户和供应商表中的“employee_id”来解决此问题。这样,当经理添加公司信息时,他们的“employee_id”将与公司信息一起保存在客户或供应商表中。这样,经理将与公司一对一地关联。也就是说,经理只能访问一家公司,即他拥有的公司。稍后,当经理将员工添加到公司时,会变得更容易,因为公司已经存在,因此供应商或客户 ID 将与员工记录一起保存。

  • 如何以正确的方式做到这一点?

    表格:

    雇员:
  • 编号
  • customer_id NULL(客户的 FK)
  • supplier_id NULL(供应商的 FK)
  • fname
  • 姓名
  • 电子邮件
  • 密码
  • user_type(客户或供应商)
  • 角色(经理或助理)

  • 顾客:
  • 编号
  • employee_id(员工的外号)
  • 公司名称
  • 联系人姓名

  • 供应商:
  • 编号
  • employee_id(员工的外号)
  • 公司名称
  • 联系人姓名

  • 谢谢

    最佳答案

    不要这样做,你会后悔的。使用派对模型和表继承。

    各方之间存在关系,例如 Frank 是 Acme Inc. 的组织联系人。或者 Jim 是 BizCo 的员工。

    您还可以将声明的角色用于您可能没有关系的人,例如您尚未与之开展业务的潜在客户或供应商。

    由于以下原因,此模式是有利的:

  • 您可以(通过销售订单)向个人或组织销售(使用一个外键)
  • 一方可以同时扮演多个角色/拥有多个关系
  • 无重复

  • 这里使用单表继承,但如果你不喜欢空值,你可以使用类表继承。这里使用 PostgreSQL 风格的 SQL,但很容易适应 MySQL。
    create table party_type (
    id int primary key,
    description text not null unique
    );

    insert into party_type values
    (1, 'Individual'),
    (2, 'Organization');


    create table party (
    id serial primary key,
    type int not null references party_type(id),
    organization_name text null,
    first_name text null,
    last_name text null
    );



    create table party_relationship_type (
    id int primary key,
    description text not null unique
    );

    insert into party_relationship_type values
    (1, 'Organization Contact'),
    (2, 'Employment');


    create table party_relationship (
    from_party_id int not null references party(id),
    to_party_id int not null references party(id),
    type int not null references party_relationship_type(id),
    primary key (from_party_id, to_party_id, type),
    check (from_party_id <> to_party_id)
    );

    /* note: no check constraints in mysql, you will have to use a trigger, or use Postgres. Don't need roles, but can be handy */

    create table party_role_type (
    id int primary key,
    description text not null unique
    );

    insert into party_role_type values
    (1, 'Customer'),
    (2, 'Supplier');


    create table party_role (
    party_id int not null references party(id),
    party_role_type_id int not null references party_role_type(id),
    primary key (party_id, party_role_type)
    );

    关于mysql - 客户、供应商及其员工,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16967742/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com