Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 市场风格应用程序的用户数据库设计_Sql_Ruby On Rails_Database_Database Design - Fatal编程技术网

Sql 市场风格应用程序的用户数据库设计

Sql 市场风格应用程序的用户数据库设计,sql,ruby-on-rails,database,database-design,Sql,Ruby On Rails,Database,Database Design,需要一些最佳实践智慧,因为我不熟悉数据库体系结构。这是一个市场类型的应用程序。我想咨询的主要问题是如何处理用户 我想实现的是买方和卖方帐户共享登录/注册功能和一些特性,但卖方帐户具有销售、接收付款等功能。买方可以发送请求,卖方可以完成请求。基本上,卖家可以做买家能做的一切,但另外,查看和满足请求,并进行销售 我会选择简单的角色,除了卖家在产品和支付信息方面比买家有更复杂的关系。此外,卖家还需要能够公开上市,并拥有公开的个人资料。我不确定拥有一个包含两种用户类型的大表是否是理想的选择 我目前的想法

需要一些最佳实践智慧,因为我不熟悉数据库体系结构。这是一个市场类型的应用程序。我想咨询的主要问题是如何处理用户

我想实现的是买方和卖方帐户共享登录/注册功能和一些特性,但卖方帐户具有销售、接收付款等功能。买方可以发送请求,卖方可以完成请求。基本上,卖家可以做买家能做的一切,但另外,查看和满足请求,并进行销售

我会选择简单的角色,除了卖家在产品和支付信息方面比买家有更复杂的关系。此外,卖家还需要能够公开上市,并拥有公开的个人资料。我不确定拥有一个包含两种用户类型的大表是否是理想的选择

我目前的想法是在基本用户表和卖方表(也可能是特定于买方的表)之间使用多态关联:

用户(买方)
  • 名字
  • 电子邮件
  • 加密密码
  • (其他身份验证字段)
  • 位置
  • 职业
  • 元标识符
  • meta_型
卖方
  • 名字
  • 位置
  • 职业
请求(属于买方和卖方)
  • 类型
  • 描述
  • 完整的
  • 买方id
  • 卖方id
产品(属于卖方)
  • 描述
  • 类别识别码
  • 卖方id
正如你所看到的,一个大问题是买家和卖家都有重复的数据。这是因为当我显示卖家时,我不想执行多表查询,但这可能不是问题?另一种选择是先有用户基表,然后是买方和卖方表,但它们仍然包含重复的信息


对一切可能性都开放。。最好的方法是什么?

你听说过多态性吗

您可以创建一个“母亲”类
User
(例如),并创建两个“儿童”类
Buyer
Seller


好的教程

假设所有用户都是买家或卖家,但不是两者都是,我会做以下几点,我认为这基本上就是你所建议的:

人 //我实际上有一个角色表,只在PERSON表中包含ROLE_id,但这可能只会增加复杂性,这取决于是否有关于要存储在数据库中的不同角色的数据

卖方 个人识别码

买主 个人识别码 //可能没有买家的任何其他数据,但如果要实现数据库级外键约束,则填充此表将允许您约束实际买家

然后是附加表。如果您使用外键约束来实现数据完整性,那么您将在特定的表(买方、卖方)上约束买方id和卖方id,这不仅保证了对个人的约束


如果人们既是买家又是卖家,然后我可能仍然会使用这个模型,并有一个角色“买方”和“卖方”,但最好添加“买方”和“卖方对人”列,以防您确信这些是您将支持的唯一角色。

您可以使用数据库超类型和子类型来表示这种关系

例如,我将数据模型分为两组:用户和角色。一个角色可以是买方或卖方,用户可以拥有零个或多个角色

然后,我将创建以下逻辑实体来表示角色关系:

超类型

  • UserRole(这个名称可能太通用了;我建议使用一个更好地反映应用程序中买方和卖方角色的名称)
子类型

  • 买主
  • 卖方
对于您的物理设计,我建议您采用以下设计之一:

  • 包含超类型实体的列以及每个子类型实体的列的单个表。检查约束可用于对子类型列强制非空约束
  • 一个表用于超类型,每个子类型实体有一个单独的表。每个子类型共有的列存储在超类型表中,其他列存储在相应的子类型表中。类型列将添加到超类型表中,以指示实体的类型。每个子类型表都包含与超类型表的外键关系
  • 混合方法结合了上述设计的各个方面
  • 访问模式

    当决定如何建模子类型和超类型关系时,要考虑的一个因素是查询是否需要访问超类型和子类型表中的列。如果大多数查询将访问超类型表和子类型表中的列,则单个表可能是更好的设计

    编辑-我建议使用第一种设计,除非有令人信服的理由为子类型创建单独的表。包含类型列的外键可用于限制与特定子类型的关系

    将用户映射到角色


    要将用户分配给角色,只需在用户表和超类型(UserRole)表之间创建多对多关系

    是的,这正是我的想法:我目前的想法是在基本用户表和卖方表(也可能是特定于买方的表)之间使用多态关联。哦,好的!我刚刚在这里的一个项目中使用了它。检查
    管理员
    合作者
    客户
    用户(来自Desive)
    。理想情况下,用户可以同时是买家和卖家,更常见的情况是,用户只是一个b