Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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_Database - Fatal编程技术网

Sql 数据库模型结构

Sql 数据库模型结构,sql,database,Sql,Database,我有一个专栏。组具有存储在组类型(买家、卖家、裁判)中的不同类型。只有当集团属于买方类型时,才有其他类型(更专业),如电气和机械 我对如何将其存储在数据库中感到有点困惑 有人能给我推荐一个数据库结构吗 谢谢将您的组类型存储为层次结构表(带有嵌套集或父子模型): 父子关系: typeid parent name 1 0 Buyers 2 0 Sellers 3 0 Referee 4 1 Electrical 5

我有一个专栏。组具有存储在组类型(买家、卖家、裁判)中的不同类型。只有当集团属于买方类型时,才有其他类型(更专业),如电气和机械

我对如何将其存储在数据库中感到有点困惑

有人能给我推荐一个数据库结构吗


谢谢

将您的
组类型
存储为层次结构表(带有
嵌套集
父子模型):

父子关系

typeid parent name 1 0 Buyers 2 0 Sellers 3 0 Referee 4 1 Electrical 5 1 Mechanic 将在Oracle中选择所有买家

嵌套集

typeid lower upper Name 1 1 2 Buyers 2 3 3 Sellers 3 4 4 Referee 4 1 1 Electrical 5 2 2 Mechanic 将选择任何数据库中的所有买家

嵌套集
可以在任何地方实现,而且性能更高,如果您不需要对
组类型进行分层排序或频繁更新

Parent-child
可以在
Oracle
SQL-Server
中轻松实现,只需在
MySQL
中稍加努力。它允许简单的结构更改和分层排序

请参阅我的博客中关于如何在MySQL中实现它的这篇文章:


您可以存储其他类型,例如,
买方机械
买方电气
您可以尝试:

Group
group_id
group_name
group_parent_id

with entries (1, buyers, 0), (2, sellers, 0), (3, referee, 0), (4, electrical, 1), (5, mechanical, 1)

这具有无限可扩展的优点,因此每个子组可以有您想要的任意多个子组。

通常,您有扩展表。这些只是模式中的附加表,其中包含通过某种键类型链接到主表的附加信息

例如,假设您的主表是:

People
  PersonId int, PK
  GroupTypeId int, FK to GroupTypes
  Name varchar(100)

GroupTypes
  GroupTypeId int, PK
  GroupTypeName varchar(20)

BuyerTypes
  BuyerTypeId int, PK
  BuyerTypeName varchar(20)

BuyerData
  PersonId int, FK
  BuyerTypeId int FK
==== 此外,BuyerData在PersonId和BuyerTypeId上有一个复合主键(PK)

在提取买家数据时,可以使用如下查询

SELECT *
  FROM People P 
    INNER JOIN BuyerData BD on (P.PersonId = BD.PersonId)
    INNER JOIN BuyerTypes BT on (BD.BuyerTypeId = BT.BuyerTypeId)
组类型:ID、名称('买家'、'卖家'、'裁判')

组:GroupTypeID、ID、名称('electrical'和'mechanical'如果GroupTypeID=='Buyer')

联系人:GroupTypeID(非空)、GroupID(空)、其他属性

表组根据需要填充GroupTypes的记录

Contact.GroupID可以为NULL,因为GroupType不需要任何组

用户界面必须负责组选择。您可以对组/类型逻辑进行触发器检查

People
  PersonId int, PK
  GroupTypeId int, FK to GroupTypes
  Name varchar(100)

GroupTypes
  GroupTypeId int, PK
  GroupTypeName varchar(20)

BuyerTypes
  BuyerTypeId int, PK
  BuyerTypeName varchar(20)

BuyerData
  PersonId int, FK
  BuyerTypeId int FK
SELECT *
  FROM People P 
    INNER JOIN BuyerData BD on (P.PersonId = BD.PersonId)
    INNER JOIN BuyerTypes BT on (BD.BuyerTypeId = BT.BuyerTypeId)